我有一张桌子,如下所示:
ID String
1 a,b,c
2 b,c,a
3 c,a,b
我想将String排序为a,b,c,因此我可以对ID和String进行分组,并且ID 1,2,3将一起分组
有什么办法可以将一个字符串中的多个值排序?像下面
ID String String2
1 a,b,c a,b,c
2 b,c,a a,b,c
3 c,a,b a,b,c
df2 = df.withColumn('String2', ','.join(sorted(df.String.split(',')))) is having errors, where it went wrong?
感谢所有贡献这篇文章的人,正确的代码发布在下面
import pyspark.sql.functions as F
array_sort_udf = F.udf(sorted, 'array<string>')
df2 = df\
.withColumn("String2", F.concat_ws(",", array_sort_udf(F.split("String", ","))))
您可以使用本机SQL函数的组合来完成任务。该split
函数使用可以排序的元素创建一个数组array_sort
。然后,您可以将值串联在一起concat_ws
。
import pyspark.sql.functions as F
df = spark.createDataFrame([(1, "a,b,c"), (2, "b,c,a"), (3, "c,a,b")], ["ID", "String"])
df.withColumn("String2", F.concat_ws(",", F.array_sort(F.split("String", ",")))).show()
+---+------+-------+
| ID|String|String2|
+---+------+-------+
| 1| a,b,c| a,b,c|
| 2| b,c,a| a,b,c|
| 3| c,a,b| a,b,c|
+---+------+-------+
查看pySpark API参考以获取更多详细信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句