Сравните список с каждым элементом в столбце pyspark

#python #apache-spark #pyspark #databricks #minhash

Вопрос:

У меня есть список minhash_sig = [‘112’, ‘223’], и я хотел бы найти сходство jaccard между этим списком и каждым элементом в столбце фрейма данных pyspark. К сожалению, я не могу этого сделать.

Я попытался использовать array_intersect, а также array_union, чтобы попытаться провести сравнение. Однако это не работает, так как я получаю сообщение Resolved attribute missing .

Вот фрейм данных pyspark, который я создал до сих пор.

 df = spark.createDataFrame(
    [
        (1, ['112','333']), 
        (2, ['112','223'])
    ],
    ["id", "minhash"]  # add your column names here
)
minhash_sig = ['112', '223']
df2 = spark.createDataFrame([Row(c1=minhash_sig)])
 

А вот код, который я использовал, чтобы попытаться сравнить список с элементами столбца pyspark.

df.withColumn('minhash_sim',size(array_intersect(df2.c1, df.minhash)))

Кто-нибудь знает, как я могу провести это сравнение без этой ошибки?

Ответ №1:

столбец из df2 не будет известен df1, если вы не присоединитесь к ним и не создадите один объект, вы можете попытаться сначала соединить оба, а затем попробовать свой код:

 df.crossJoin(df2).withColumn('minhash_sim',size(array_intersect("c1", "minhash")))
  .show()
 

  --- ---------- ---------- ----------- 
| id|   minhash|        c1|minhash_sim|
 --- ---------- ---------- ----------- 
|  1|[112, 333]|[112, 223]|          1|
|  2|[112, 223]|[112, 223]|          2|
 --- ---------- ---------- -----------