我正在读取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'
关键字提到我提到的列。
任何人都有任何想法?
答案 0 :(得分:4)
它似乎总是按照书面的顺序出现......
你是对的。 Spark就像任何SQL数据库一样。输入数据集中的列名称没有任何区别 由于您没有将输出列显式映射到输入列,因此Spark必须假定映射是按位置按完成的。
请冥想以下测试用例...
"..#"
免责声明 - 我实际上没有测试这些命令,里面可能存在一些拼写错误和语法问题(特别是因为你没有提到你的Hive和Spark版本),但是你应该看到这一点。