[英]Spark sql save dataframe to hive
嗨,我正在用Java编写一些sparksql代码。我有一个如下所示的类:
public class Item_Meta {
private String itemId;
private String category;
private String description;
private String properties;}
然后,我通过以下语句从Item_Meta列表中创建一个称为数据集的数据集 :
Dataset<Row> dataset = sparkSession.sqlContext().createDataFrame(list, Item_Meta.class)
然后调用dataset.show() ,我得到了:
+--------+-----------+------+----------+
|category|description|itemId|properties|
+--------+-----------+------+----------+
| 1| item1| 1|avgGrade1|
| 1| item2| 2|avgGrade2|
| 1| item3| 3|avgGrade3|
| 1| item4| 4|avgGrade4|
| 1| item5| 5|avgGrade5|
+--------+-----------+------+----------+
这看起来不错,因为我的项目ID范围是1到5,类别全部为1,描述为“项目” + ID ...
然后,使用以下语句将此数据集保存到hive中:
saveSql="INSERT OVERWRITE TABLE "+tableName+" PARTITION(ds='"+ds+"') select * from dataset"
它起作用了,但是当我查询蜂巢表时,我得到了:
+-------+--------+-----------+----------+----------+
|item_id|category|description|properties| ds|
+-------+--------+-----------+----------+----------+
| 1| item1| 1|avgGrade1|2017-10-26|
| 1| item2| 2|avgGrade2|2017-10-26|
| 1| item3| 3|avgGrade3|2017-10-26|
| 1| item4| 4|avgGrade4|2017-10-26|
| 1| item5| 5|avgGrade5|2017-10-26|
+-------+--------+-----------+----------+----------+
如您所见,问题在于数据不在正确的列中 。 我该如何解决?
在执行INSERT OVERWRITE
时,列的顺序很重要。
您必须将查询更改为如下所示:
INSERT OVERWRITE TABLE tablename
PARTITION(ds = '2017-10-26')
SELECT
itemId,
category,
description,
properties
from
dataset
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.