我有一个列,其中有斜线之间的例子如下所示,凡数字是目前在一个字符串中,我需要得到最小值,凡他们是数字和字母数字,那么我需要得到只有字母数字。这必须在pysaprk dataframe中完成。输入示例:
cngwdvgl1#
使用**split内置函数尝试array_min**函数。
split
array_min
Example:
df = spark.createDataFrame([('111/112',),('113/PAG',),('801/802',),('801/62S',)],['ip']) df.withColumn("ip",array_min(split(col("ip"),"/"))).show(10,False) #+---+ #|ip | #+---+ #|111| #|113| #|801| #|62S| #+---+
字符串
UPDATE:
from pyspark.sql.functions import * df = spark.createDataFrame([('111/112',),('113/PAG/PAZ',),('801/802',),('801/62S',)],['ip']) df.withColumn("temp_ip1", split(col("ip"),"/").cast("array<int>")).\ withColumn("temp_ip2", split(col("ip"),"/")).\ withColumn("temp", array_except(col("temp_ip2"),array_except(col("temp_ip1"),array(lit(None))).cast("array<string>"))).\ withColumn("min_ip", array_min(when(size(col("temp"))>0,col("temp")).otherwise(col("temp_ip2")))).\ drop(*['temp_ip1','temp_ip2','temp']).\ show(10,False) #+-----------+------+ #|ip |min_ip| #+-----------+------+ #|111/112 |111 | #|113/PAG/PAZ|PAG | #|801/802 |801 | #|801/62S |62S | #+-----------+------+
型
1条答案
按热度按时间cngwdvgl1#
使用**
split
内置函数尝试array_min
**函数。split
->拆分字符串并创建数组array_min
->从数组中获取最小值Example:
字符串
UPDATE:
型