Как получить строки, разделенные запятыми, из списка в запросе в PySpark? - PullRequest
0 голосов
/ 21 марта 2019

Я хочу сгенерировать запрос, используя список в PySpark

list = ["hi@gmail.com", "goodbye@gmail.com"]
query = "SELECT * FROM table WHERE email IN (" + list + ")"

Это мой желаемый вывод:

query
SELECT * FROM table WHERE email IN ("hi@gmail.com", "goodbye@gmail.com")

Вместо этого я получаю: TypeError: cannot concatenate 'str' and 'list' objects

Может кто-нибудь помочь мне достичь этого?Спасибо

Ответы [ 2 ]

0 голосов
/ 25 марта 2019

Попробуйте:

Подход на основе фреймов данных -

df = spark.createDataFrame([(1,"hi@gmail.com") ,(2,"goodbye@gmail.com",),(3,"abc@gmail.com",),(4,"xyz@gmail.com")], ['id','email_id'])

email_filter_list = ["hi@gmail.com", "goodbye@gmail.com"]

df.where(col('email_id').isin(email_filter_list)).show()

Подход на основе Spark SQL -

df = spark.createDataFrame([(1,"hi@gmail.com") ,(2,"goodbye@gmail.com",),(3,"abc@gmail.com",),(4,"xyz@gmail.com")], ['id','email_id'])
df.createOrReplaceTempView('t1')

sql_filter  = ','.join(["'" +i + "'" for i in email_filter_list])

spark.sql("SELECT * FROM t1 WHERE email_id IN ({})".format(sql_filter)).show()
0 голосов
/ 21 марта 2019

Если у кого-то возникла такая же проблема, я обнаружил, что вы можете использовать следующий код:

"'"+"','".join(map(str, emails))+"'"

и вы получите следующий вывод:

SELECT * FROM table WHERE email IN ('hi@gmail.com', 'goodbye@gmail.com')

...