Spark sql如何在循环中为输入DataFrame中的每个记录执行sql命令
我有一个带有以下架构的DataFrame
%> input.printSchema
root
|-- _c0: string (nullable = true)
|-- id: string (nullable = true)
我有另一个DataFrame需要执行sql命令
val testtable = testDf.registerTempTable("mytable")
%>testDf.printSchema
root
|-- _1: integer (nullable = true)
sqlContext.sql(s"SELECT * from mytable WHERE _1=$id").show()
$ id应该来自输入DataFrame,而sql命令应该对所有输入表id执行
答案 0 :(得分:2)
假设您可以使用包含testDf
中存在的与id
的{{1}}列中的值匹配的所有行的单个新DataFrame,您可以执行内部联接操作,正如Alberto所说:
input
现在,如果您想为val result = input.join(testDf, input("id") == testDf("_1"))
result.show()
中存在的每个不同值创建一个新的,不同的DataFrame,问题会更加困难。如果是这种情况,我建议您确保查找表中的数据可以作为本地列表收集,这样您就可以循环遍历其值并为您创建一个新的DataFrame(正如您所想的那样) >不推荐):
testDf
无论如何,除非查找表非常小,否则我建议您调整逻辑以使用我的第一个示例中单个连接的DataFrame。