#python #pyspark
Вопрос:
Я хочу проверить количество общих вхождений списка слов в столбце массива pyspark
ls=['aa','bb']
df
| item|
|:---- |
| ['aa','bb']|
| ['aa','bc']|
| ['ad','bc']|
если это кадр данных, то вывод должен быть
| item| count|
|:---- |:------:|
| ['aa','bb']| 2|
| ['aa','bc']| 1|
| ['ad','bc']| 0|
Ответ №1:
Этого можно достичь, слегка изменив определение ls
переменной.
from pyspark.sql import SparkSession
from pyspark.sql import functions as F
spark = SparkSession.builder.enableHiveSupport().getOrCreate()
ls = [
(['aa', 'bb'],),
]
data = [
(['aa', 'bb'],),
(['aa', 'bc'],),
(['ad', 'bc'],)
]
df1 = spark.createDataFrame(ls, ['words'])
df2 = spark.createDataFrame(data, ['word_arr'])
df = df2.join(df1, how='full').select('word_arr', F.size(F.array_intersect('word_arr', 'words')).alias('count'))
df.show(truncate=False)