PySpark:将python列表中的元素添加到spark.sql()语句中

q1qsirdb  于 2023-06-05  发布在  Spark
关注(0)|答案(3)|浏览(671)

在Python中有一个列表,在我的代码中使用:

pylist = ['A', 'B', 'C', 'D']

我也有一个简单的spark.sql()行,我需要执行:

query = spark.sql(
    """
    SELECT col1, col2, col3
    FROM database.table
    WHERE col3 IN ('A', 'B', 'C', 'D')
    """
)

我想用python列表替换spark.sql()语句中的元素列表,这样SQL中的最后一行就变成了

...
AND col3 IN pylist

我知道使用{}str.format,但我很难理解这是否是正确的选择,以及如何工作。

nnsrf1az

nnsrf1az1#

好的,经过更多的研究,我想我找到了使用.format(tuple(pylist))的解决方案
现在的声明是:

pylist = ['A', 'B', 'C', 'D']

s = """
    SELECT col1, col2, col3
    FROM database.table
    WHERE col3 IN {}
    """.format(tuple(pylist))

query = spark.sql(s)
toe95027

toe950272#

转换为元组以在转换为字符串时获取“()”而不是“[]”

sql_str="SELECT col1, col2, col3 FROM database.table WHERE col3 IN " + str(tuple(pylist))

query = spark.sql(sql_str)
rsl1atfo

rsl1atfo3#

你也可以使用f-string和{tuple(pylist)},如下所示:
现在的声明是:

pylist = ['A', 'B', 'C', 'D']

s = f"""
    SELECT col1, col2, col3
    FROM database.table
    WHERE col3 IN {tuple(pylist)}
    """

query = spark.sql(s)

相关问题