【发布时间】:2020-12-08 23:35:27
【问题描述】:
我有一个 pyspark 数据框,其中包含以下字段: “ID”, "fields_0_type" , "fields_0_price", "fields_1_type", “fields_1_price”
+------------------+--------------+-------------+-------------+---
|id |fields_0_type|fields_0_price|fields_1_type|fields_1_price|
+------------------+-----+--------+-------------+----------+
|1234| Return |45 |New |50 |
+--------------+----------+--------------------+------------+
如何将这些值的值保存到名为“类型”和“价格”的两列中作为列表,并用“,”分隔值。理想的数据框如下所示:
+--------------------------- +------------------------------+
|id |type | price
+---------------------------+------------------------------+
|1234 |Return,Upgrade |45,50
请注意,我在这里提供的数据是一个示例。实际上,我需要合并的不仅仅是“类型”和“价格”列。
更新:
谢谢它的工作。但是有什么办法可以摆脱多余的“,”?这些是由于列中存在空白值这一事实造成的。有没有办法不接受那些包含空白值的列? 现在显示的内容:
+------------------------------------------------------------------+
|type |
+------------------------------------------------------------------+
|New,New,New,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, |
|New,New,Sale,Sale,New,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,|
+------------------------------------------------------------------+
我想要它:
+------------------------------------------------------------------+
|type |
+------------------------------------------------------------------+
|New,New,New |
|New,New,Sale,Sale,New|
+------------------------------------------------------------------+
【问题讨论】:
-
在使用
concat_ws之前将空格替换为lit(None)之类的df = df.select(*[when(col(c) == "", lit(None)).otherwise(col(c)) for c in cols])或使用regexp_replace删除尾随逗号。 -
这里的“cols”指的是什么?
-
cols应该是df.columns- 这是一个错字