从spark sql插入hive表

时间:2016-12-17 19:39:36

标签: apache-spark hive apache-spark-sql

我正在读取json文件中的一些数据并将其转换为我用来将数据发送到hive的字符串。

数据在Hive中正常运行,但它被分配到错误的列中,我做了一个小例子

在Hive中:

Table name = TestTable, Column1 = test1, Column2 = test2`

我的代码:

data = hiveContext.sql("select \"hej\" as test1, \"med\" as test2")
data.write.mode("append").saveAsTable("TestTable")

data = hiveContext.sql("select \"hej\" as test2, \"med\" as test1")
data.write.mode("append").saveAsTable("TestTable")

这导致"hej"出现在test1两次,"med"出现在test2两次,而不是每次出现一次。

它似乎总是按照所写的顺序显示,而不是使用'as'关键字提到我提到的列。

任何人都有任何想法?

1 个答案:

答案 0 :(得分:4)

  

它似乎总是按照书面的顺序出现......

你是对的。 Spark就像任何SQL数据库一样。输入数据集中的列名称没有任何区别 由于您没有将输出列显式映射到输入列,因此Spark必须假定映射是按位置完成的。

请冥想以下测试用例...

"..#"

免责声明 - 我实际上没有测试这些命令,里面可能存在一些拼写错误和语法问题(特别是因为你没有提到你的Hive和Spark版本),但是你应该看到这一点。