Вот два определенных 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