【发布时间】:2018-05-09 18:38:54
【问题描述】:
我在pyspark 中有一个数据框,如下所示
df.show()
+-------+--------------------+--------------------+
| Dev_No| model| Tested|
+-------+--------------------+--------------------+
|BTA16C5| Windows PC| N|
|BTA16C5| SRL| N|
|BTA16C5| Hewlett Packard| N|
|CTA16C5| Android Devices| Y|
|CTA16C5| Hewlett Packard| N|
|4MY16A5| Other| N|
|4MY16A5| Other| N|
|4MY16A5| Tablet| Y|
|4MY16A5| Other| N|
|4MY16A5| Cable STB| Y|
|4MY16A5| Other| N|
|4MY16A5| Windows PC| Y|
|4MY16A5| Windows PC| Y|
|4MY16A5| Smart Watch| Y|
+-------+--------------------+--------------------+
现在使用上面的数据框,我想用一个名为Tested_devices 的newcolumn 创建下面的数据框,并用每个Dev_No 选择model 的值填充列,其中Tested 是Y并将所有值填充为逗号分隔。
df1.show()
+-------+--------------------+--------------------+------------------------------------------------------+
| Dev_No| model| Tested| Tested_devices|
+-------+--------------------+--------------------+------------------------------------------------------+
|BTA16C5| Windows PC| N| |
|BTA16C5| SRL| N| |
|BTA16C5| Hewlett Packard| N| |
|CTA16C5| Android Devices| Y| Android Devices|
|CTA16C5| Hewlett Packard| N| |
|4MY16A5| Other| N| |
|4MY16A5| Other| N| |
|4MY16A5| Tablet| Y| Tablet, Cable STB,Windows PC, Windows PC, Smart Watch|
|4MY16A5| Other| N| |
|4MY16A5| Cable STB| Y| Tablet, Cable STB,Windows PC, Windows PC, Smart Watch|
|4MY16A5| Other| N| |
|4MY16A5| Windows PC| Y| Tablet, Cable STB,Windows PC, Windows PC, Smart Watch|
|4MY16A5| Windows PC| Y| Tablet, Cable STB,Windows PC, Windows PC, Smart Watch|
|4MY16A5| Smart Watch| Y| Tablet, Cable STB,Windows PC, Windows PC, Smart Watch|
+-------+--------------------+--------------------+------------------------------------------------------+
我尝试了类似下面的方法来选择Dev_No 和model 其中Tested 是Y
a = df.select("Dev_No", "model"), when(df.Tested == 'Y')
我无法得到结果。它给了我以下错误
TypeError: when() takes exactly 2 arguments (1 given)
我怎样才能达到我想要的效果
【问题讨论】:
-
是否需要 Dev_No 在输出中重复?一个更简单的解决方案可能是仅过滤到经过测试的设备,然后在 Dev_No 上分组并将模型收集为一个列表:
-
您尝试的错误是您应该使用 where 过滤数据框:
a = df.where(df.Tested == 'Y').select("Dev_No", "model")
标签: apache-spark pyspark spark-dataframe