如何在PySpark数据帧的列(带有数据类型数组(字符串))上应用筛选器?

2024-06-16 11:23:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个PySpark数据帧:

df = spark.createDataFrame([
    ("u1", ['a', 'b']),
    ("u2", ['c', 'b']),
    ("u3", ['a', 'b']),

    ],
    ['user_id', 'features'])

print(df.printSchema())
df.show(truncate=False)

输出:

root
 |-- user_id: string (nullable = true)
 |-- features: array (nullable = true)
 |    |-- element: string (containsNull = true)

None
+-------+--------+
|user_id|features|
+-------+--------+
|u1     |[a, b]  |
|u2     |[c, b]  |
|u3     |[a, b]  |
+-------+--------+

我只想保留名为features[a,b]的列。由于此列是字符串数组,因此不能使用简单筛选器

我怎样才能做到这一点

预期产出:

+-------+--------+
|user_id|features|
+-------+--------+
|u1     |[a, b]  |
|u3     |[a, b]  |
+-------+--------+

Tags: 数据idtruedfstringsparkpysparkfeatures
1条回答
网友
1楼 · 发布于 2024-06-16 11:23:37

您可以使用array(lit(...))

import pyspark.sql.functions as F

df2 = df.filter(F.array_sort(F.col('features')) == F.array_sort(F.array(F.lit('a'), F.lit('b'))))

df2.show()
+   -+    +
|user_id|features|
+   -+    +
|     u1|  [a, b]|
|     u3|  [a, b]|
+   -+    +

相关问题 更多 >