我有一个用例,其中有一个带有一列的表,该列具有SQL查询序列。
我想在 Spark 程序中一个接一个地运行这些 SQL 查询,而不是并行运行。这是因为第 N 行上的 SQL 查询将依赖于第 (N-1( 行。
现在由于这个约束,我想一个接一个地按顺序执行,而不是并行执行。我怎样才能做到这一点?
我认为你可以使用这样的东西:
val listOfQueryRows = spark.sqlContext.table("foo_db.table_of_queries")
.select(col("sql_query"))
.orderBy(col("query_index"))
.collectAsList()
listOfQueryRows.forEach(queryRow => spark.sql(queryRow.getString(0)))
这将选择sql_query
列中的所有查询,按query_index
中给出的索引对它们进行排序,并在驱动程序listOfQueryRows
列表中收集它们。然后,对列表按顺序迭代执行每个返回行的查询。