嗨,我正在使用java编写一些sparksql代码。我有一个类,如下所示:
public class Item_Meta {
private String itemId;
private String category;
private String description;
private String properties;}
然后我通过下面的语句从item\u meta列表中创建一个名为dataset的数据集:
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。。。
然后使用以下语句将此数据集保存到配置单元:
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|
+-------+--------+-----------+----------+----------+
如您所见,问题是数据不在正确的列中。我怎样才能解决这个问题?
1条答案
按热度按时间yrefmtwq1#
列的顺序在执行
INSERT OVERWRITE
.您必须将查询更改为如下所示: