Spark sql如何在循环中为输入DataFrame中的每个记录执行sql命令

时间:2016-05-17 20:36:47

标签: apache-spark dataframe

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执行

1 个答案:

答案 0 :(得分:2)

假设您可以使用包含testDf中存在的与id的{​​{1}}列中的值匹配的所有行的单个新DataFrame,您可以执行内部联接操作,正如Alberto所说:

input

现在,如果您想为val result = input.join(testDf, input("id") == testDf("_1")) result.show() 中存在的每个不同值创建一个新的,不同的DataFrame,问题会更加困难。如果是这种情况,我建议您确保查找表中的数据可以作为本地列表收集,这样您就可以循环遍历其值并为您创建一个新的DataFrame(正如您所想的那样) >不推荐):

testDf

无论如何,除非查找表非常小,否则我建议您调整逻辑以使用我的第一个示例中单个连接的DataFrame。