Luf*_*fen 2 hive apache-spark apache-spark-sql
我正在从json文件中读取一些数据,并将其转换为用于将数据发送到配置单元的字符串。
数据在Hive中可以很好地到达,但它被分配到错误的列中,我举了一个小例子
在Hive中:
Table name = TestTable, Column1 = test1, Column2 = test2`
Run Code Online (Sandbox Code Playgroud)
我的代码:
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")
Run Code Online (Sandbox Code Playgroud)
此结果在"hej"显示出来的test1两倍和"med"表示了test2两次,而不是一个上显示的是每个。
它总是似乎总是按照书写的顺序显示,而没有进入我用'as'关键字提到的列。
有人有想法么?
它总是似乎总是以书面的顺序出现...
你是对的。Spark就像任何SQL数据库一样工作。输入数据集中的列名没有任何区别。
并且由于没有将输出列显式映射到输入列,因此Spark必须假定映射是通过position完成的。
只需思考以下测试用例...
hiveContext.sql("create temporary table TestTable (RunId string, Test1 string, Test2 string)")
hiveContext.sql("insert into table TestTable select 'A', 'x1', 'y1'")
hiveContext.sql("insert into table TestTable (RunId, Test1, Test2) select 'B', 'x2' as Blurb, 'y2' as Test1")
hiveContext.sql("insert into table TestTable (RunId, Test2, Test1) select 'C', 'x3' as Blurb, 'y3' as Test1")
data = hiveContext.sql("select 'xxx' as Test1, 'yyy' as Test2"))
data.registerTempTable("Dummy")
hiveContext.sql("insert into table TestTable(Test1, RunId, Test2) select Test1, 'D', Test2 from Dummy")
hiveContext.sql("insert into table TestTable select Test1, 'E', Test2 from Dummy")
hiveContext.sql("select * from TestTable").show(20)
Run Code Online (Sandbox Code Playgroud)
免责声明-我实际上没有测试这些命令,内部可能存在一些拼写错误和语法问题(尤其是因为您没有提到Hive和Spark版本),但是您应该明白这一点。
| 归档时间: |
|
| 查看次数: |
8139 次 |
| 最近记录: |