我正在处理数据帧df
,例如以下数据帧:
df.show()
输出:
+----+------+
|keys|values|
+----+------+
| aa| apple|
| bb|orange|
| bb| desk|
| bb|orange|
| bb| desk|
| aa| pen|
| bb|pencil|
| aa| chair|
+----+------+
我使用collect_set
进行汇总,并获得一组已消除重复元素的对象(或collect_list
来获得对象列表)。
df_new = df.groupby('keys').agg(collect_set(df.values).alias('collectedSet_values'))
结果数据帧如下:
df_new.show()
输出:
+----+----------------------+
|keys|collectedSet_values |
+----+----------------------+
|bb |[orange, pencil, desk]|
|aa |[apple, pen, chair] |
+----+----------------------+
我正在努力寻找一种方法来查看所生成的对象集中(在{{1}列中)是否包含特定的关键字(例如'chair')。我不想采用collectedSet_values
解决方案。
请评论您的解决方案/想法。
亲切的问候。
答案 0 :(得分:3)
实际上,有一个不错的功能array_contains
可以为我们做到这一点。我们将其用于对象集的方式与here中的相同。要知道每组对象中是否都存在“椅子”一词,我们可以简单地执行以下操作:
df_new.withColumn('contains_chair', array_contains(df_new.collectedSet_values, 'chair')).show()
输出:
+----+----------------------+--------------+
|keys|collectedSet_values |contains_chair|
+----+----------------------+--------------+
|bb |[orange, pencil, desk]|false |
|aa |[apple, pen, chair] |true |
+----+----------------------+--------------+
collect_list
的结果也是如此。