繁体   English   中英

Spark SQL将数据框保存到配置单元

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM