Apache spark 迭代select查询

Apache spark 迭代select查询,apache-spark,pyspark,apache-spark-sql,pyspark-sql,Apache Spark,Pyspark,Apache Spark Sql,Pyspark Sql,我想创建一个数据集,它是许多select查询的堆叠数据集,其中一个参数在我的where子句中更改。我可以使用python通过调用select查询n次并相应地更改where原因来实现这一点。这是不是我可以在SQL中一次性完成,而不必进行n个单独的select查询 比如说 dfs = [] for name in names: dfs.append(spark.select("select * from personal_data where Name = 'f{name}'")) # So

我想创建一个数据集,它是许多select查询的堆叠数据集,其中一个参数在我的where子句中更改。我可以使用python通过调用select查询n次并相应地更改where原因来实现这一点。这是不是我可以在SQL中一次性完成,而不必进行n个单独的select查询

比如说

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行。至少这就是为什么我进行了许多select查询,然后将结果数据帧堆叠在一起。

使用SQL连接:

names_df=spark.createDataFrame[n,表示名称中的n], schema=name, 名称\u df.RegisterEmptableNames\u df spark.sqlselect*从个人_数据中选择为p left join names_df as n,其中n.name=p.name.show
您不需要为此创建多个数据帧。只需在“名称”列表中选择具有名称的行

如果名称列表不太大,则可以使用带筛选器的isin函数


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

这是否可能导致返回的行顺序混乱?或者与name谓词相关的所有行都会同时出现,然后是下一批吗?我不确定我是否理解您的问题,但这实际上返回了满足name is in names列表的所有行。这相当于SQL语法,其中名称在“name1”、“name2”中,……我在问题中添加了更多的细节,请让我知道这是否更清楚。好的,只需添加一个orderBy名称,就可以将每个名称的行放在一起。df.filtercolName.isin*names.orderBycolName.show
df.filter(col("Name").isin(*names)).show()