spark sql将Dataframe保存到配置单元

sg3maiej  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(505)

嗨,我正在使用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|
+-------+--------+-----------+----------+----------+

如您所见,问题是数据不在正确的列中。我怎样才能解决这个问题?

yrefmtwq

yrefmtwq1#

列的顺序在执行 INSERT OVERWRITE .
您必须将查询更改为如下所示:

INSERT OVERWRITE TABLE tablename
PARTITION(ds = '2017-10-26')
SELECT
  itemId,
  category,
  description,
  properties
from
  dataset

相关问题