将 PySpark 数据框列从列表转换为字符串

新手上路,请多包涵

我有这个 PySpark 数据框

+-----------+--------------------+
|uuid       |   test_123         |
+-----------+--------------------+
|      1    |[test, test2, test3]|
|      2    |[test4, test, test6]|
|      3    |[test6, test9, t55o]|

我想将列 test_123 转换成这样:

 +-----------+--------------------+
|uuid       |   test_123         |
+-----------+--------------------+
|      1    |"test,test2,test3"  |
|      2    |"test4,test,test6"  |
|      3    |"test6,test9,t55o"  |

所以从列表是字符串。

我怎样才能用 PySpark 做到这一点?

原文由 Dkova 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 498
2 个回答

您可以创建一个 udf 加入 _数组/列表_,然后将其应用于 测试 列:

 from pyspark.sql.functions import udf, col

join_udf = udf(lambda x: ",".join(x))
df.withColumn("test_123", join_udf(col("test_123"))).show()

+----+----------------+
|uuid|        test_123|
+----+----------------+
|   1|test,test2,test3|
|   2|test4,test,test6|
|   3|test6,test9,t55o|
+----+----------------+

初始数据框是从以下内容创建的:

 from pyspark.sql.types import StructType, StructField
schema = StructType([StructField("uuid",IntegerType(),True),StructField("test_123",ArrayType(StringType(),True),True)])
rdd = sc.parallelize([[1, ["test","test2","test3"]], [2, ["test4","test","test6"]],[3,["test6","test9","t55o"]]])
df = spark.createDataFrame(rdd, schema)

df.show()
+----+--------------------+
|uuid|            test_123|
+----+--------------------+
|   1|[test, test2, test3]|
|   2|[test4, test, test6]|
|   3|[test6, test9, t55o]|
+----+--------------------+

原文由 Psidom 发布,翻译遵循 CC BY-SA 3.0 许可协议

虽然您可以使用 UserDefinedFunction效率很低。相反,最好使用 concat_ws 函数:

 from pyspark.sql.functions import concat_ws

df.withColumn("test_123", concat_ws(",", "test_123")).show()
 +----+----------------+
|uuid|        test_123|
+----+----------------+
|   1|test,test2,test3|
|   2|test4,test,test6|
|   3|test6,test9,t55o|
+----+----------------+

原文由 zero323 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题