![](/img/trans.png)
[英]Remove empty strings from a list of strings on each row in a pandas dataframe
[英]Intersect each row of a pyspark DataFrame which is a list of strings with a master list of strings?
假设我有一个这样的 DataFrame。
[Row(case_number='5307793179', word_list=['n', 'b', 'c']),
Row(case_number='5307793171', word_list=['w', 'e', 'c']),
Row(case_number='5307793172', word_list=['1', 'f', 'c']),
Row(case_number='5307793173', word_list=['a', 'k', 'c']),
Row(case_number='5307793174', word_list=['z', 'l', 'c']),
Row(case_number='5307793175', word_list=['b', 'r', 'c'])]
和一个像这样的主词表:
master_word_list = ['b', 'c']
是否有一种时尚的方法可以根据 master_word_list 过滤 word_list,因此生成的 pyspark 数据框如下所示。 (时尚我的意思是不使用 UDF,如果 UDF 是最好/唯一的方式,我也会接受它作为解决方案)
[Row(case_number='5307793179', word_list=['b', 'c']),
Row(case_number='5307793171', word_list=['c']),
Row(case_number='5307793172', word_list=['c']),
Row(case_number='5307793173', word_list=['c']),
Row(case_number='5307793174', word_list=['c']),
Row(case_number='5307793175', word_list=['b', 'c'])]
array_intersect
从 Spark 2.4 开始可用:
pyspark.sql.functions.array_intersect(col1, col2)
集合函数:返回col1和col2交集的元素组成的数组,没有重复。
参数:
- col1 – 包含数组的列的名称
- col2 – 包含数组的列的名称
from pyspark.sql.functions import array, array_intersect, lit
master_word_list_col = array(*[lit(x) for x in master_word_list])
df = spark.createDataFrame(
[("5307793179", ["n", "b", "c"])],
("case_number", "word_list")
)
df.withColumn("word_list", array_intersect("word_list", master_word_list_col)).show()
+-----------+---------+
|case_number|word_list|
+-----------+---------+
| 5307793179| [b, c]|
+-----------+---------+
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.