как проверить количество списка слов в столбце массива pyspark?

#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)