pyspark 当字符串中间有斜杠时,如何获取给定字符串中的最小值或所需值

slhcrj9b  于 2023-08-02  发布在  Spark
关注(0)|答案(1)|浏览(103)

我有一个列,其中有斜线之间的例子如下所示,凡数字是目前在一个字符串中,我需要得到最小值,凡他们是数字和字母数字,那么我需要得到只有字母数字。这必须在pysaprk dataframe中完成。
输入示例:

  1. 111/112
  2. 113/PAG
  3. 801/802/803/804
  4. 801/62S
    所需输出应为
    1.一百一十一
  5. PAG
    1.八零一
  6. 62S
    我尝试过分解数据框列,但它不起作用。请帮我这个忙。
cngwdvgl

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   |
#+-----------+------+

相关问题