迭代选择查询



我想创建一个数据集,它是许多选择查询的堆叠数据集,在我的 where 子句中更改了一个参数。 我可以通过调用 python n 次选择查询并相应地更改我的位置原因来使用 python 来做到这一点。 这是我可以在 SQL 中一次性完成而无需进行 n 个单独选择查询的事情吗?

例如

dfs = []
for name in names:
dfs.append(spark.select("select * from personal_data where Name = 'f{name}'"))
# Some logic to take the list of dataframes and make one stacked dataframe

是否可以通过一个选择查询而不是构造查询来实现这一点?

目前该方法如上的原因是因为表中的行没有组合在一起,因此例如,当我输入名字的 where 子句时,我得到第 1、6、10 行。 下一个名称将返回第 2、3、7 行。

生成的数据集应保持此顺序,即

第 1、6、10、2、3、7 行。 这至少是我进行许多选择查询然后将生成的数据帧堆叠在一起的原因。

无需为此创建多个数据帧。只需选择列表中有Namenames行即可。

如果名称列表不是太大,则可以isin函数与filter一起使用。

df.filter(col("Name").isin(*names)).show()

否则,请按照 @Oliver W 的建议使用join

使用 SQL 连接:

names_df = spark.createDataFrame([(n,) for n in names],
schema=("name",))
names_df.registerTempTable("names_df")
spark.sql("select * from personal_data as p left join names_df as n where n.name = p.Name").show()

最新更新