pyspark - почему функция array_contains принимает оба выражения в выражении? - PullRequest
0 голосов
/ 13 февраля 2020

Вот два определенных DF:

person = spark.createDataFrame([
(0, "Bill Chambers", 0, [100]),
(1, "Matei Zaharia", 1, [500, 250, 100]),
(2, "Michael Armbrust", 1, [250, 100])]).toDF("id", "name", "graduate_program", "spark_status")

sparkStatus = spark.createDataFrame([
    (500, "Vice President"),
    (250, "PMC Member"),
    (100, "Contributor")])\
  .toDF("id", "status")

Теперь я попытался объединить два DF с выражением array_contains

from pyspark.sql.functions import expr
person.withColumnRenamed("id", "personId")\
    .join(sparkStatus,expr("array_contains(spark_status,id)"))\
    .show()

Я могу получить этот результат


+--------+----------------+----------------+---------------+---+--------------+
|personId|            name|graduate_program|   spark_status| id|        status|
+--------+----------------+----------------+---------------+---+--------------+
|       0|   Bill Chambers|               0|          [100]|100|   Contributor|
|       1|   Matei Zaharia|               1|[500, 250, 100]|500|Vice President|
|       1|   Matei Zaharia|               1|[500, 250, 100]|250|    PMC Member|
|       1|   Matei Zaharia|               1|[500, 250, 100]|100|   Contributor|
|       2|Michael Armbrust|               1|     [250, 100]|250|    PMC Member|
|       2|Michael Armbrust|               1|     [250, 100]|100|   Contributor|
+--------+----------------+----------------+---------------+---+--------------+

Теперь я пытаюсь восстановить массив array_contains с обоими столбцами во входных данных со следующим:

from pyspark.sql.functions import expr,array_contains
person.withColumnRenamed("id", "personId")\
    .join(sparkStatus,array_contains(person.spark_status,sparkStatus.id))\
    .show()

Однако я получаю ошибку:

TypeError: Column is not iterable

вот описание функции введите описание ссылки здесь

pyspark.sql.functions.array_contains(col, value)[source]
Collection function: returns null if the array is null, true if the array contains the given value, and false otherwise.

Parameters
col – name of column containing array

value – value to check for in array
...