如何解决解析pyspark中数组的每个元素并应用子字符串
嗨,我有一个pyspark数据框,其数组如下所示。
我想遍历每个元素,并且只在连字符之前获取字符串并创建另一列。
+------------------------------+
|array_col |
+------------------------------+
|[hello-123,abc-111] |
|[hello-234,def-22,xyz-33] |
|[hiiii-111,def2-333,lmn-222]|
+------------------------------+
所需的输出;
+------------------------------+--------------------+
|col1 |new_column |
+------------------------------+--------------------+
|[hello-123,abc-111] |[hello,abc] |
|[hello-234,xyz-33] |[hello,def,xyz] |
|[hiiii-111,lmn-222]|[hiiii,def2,lmn] |
+------------------------------+--------------------+
我正在尝试以下操作,但是无法在udf中应用正则表达式/子字符串。
cust_udf = udf(lambda arr: [x for x in arr],ArrayType(StringType()))
df1.withColumn('new_column',cust_udf(col("col1")))
有人可以帮忙吗?谢谢
解决方法
在 Spark-2.4
中使用 transform
高阶功能。
Example:
df.show(10,False)
#+---------------------------+
#|array_col |
#+---------------------------+
#|[hello-123,abc-111] |
#|[hello-234,def-22,xyz-33]|
#+---------------------------+
df.printSchema()
#root
# |-- array_col: array (nullable = true)
# | |-- element: string (containsNull = true)
from pyspark.sql.functions import *
df.withColumn("new_column",expr('transform(array_col,x -> split(x,"-")[0])')).\
show()
#+--------------------+-----------------+
#| array_col| new_column|
#+--------------------+-----------------+
#|[hello-123,abc-111]| [hello,abc]|
#|[hello-234,def-2...|[hello,def,xyz]|
#+--------------------+-----------------+
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。