pyspark создает отдельный список из столбца spark dataframe и использует его в операторе spark sql where

#apache-spark #pyspark #apache-spark-sql

#apache-spark #pyspark #apache-spark-sql

Вопрос:

У меня есть dataframe df и имя столбца setp для создания списка, который я написал

 setp_list=df.select ('setp').distinct().collect()
setp_array=[row.setp for row in setp_list]
setp_array= str(setp_array)[1:-1]
 

Я хотел использовать его в инструкции spark.sql

 df1=spark.sql(f"select * from table where setp in ({setp_array})").
 

Я не уверен, как отобразить список, чтобы увидеть, как он был создан, но в основном я хочу, чтобы он был включен в инструкцию spark sql. Он выдает ошибку в инструкции spark sql как недопустимый синтаксис

Ответ №1:

Избегайте сбора элементов из одной таблицы и использования их в запросе другой таблицы. Используйте a JOIN для написания реляционных запросов.

 df.createOrReplaceTempView('df')

df1 = spark.sql("select * from table semi join df using(setp)")
 

Комментарии:

1. отредактировано, чтобы использовать более консервативный тон … извините за излишнюю эмоциональность при написании сообщения! @mazaneicha

2. @mck О, круто, я не понимал, что могу создать временную таблицу и использовать ее в spark sql. Получил ошибку при использовании полусоединения, поэтому вместо этого использовал подзапрос