【发布时间】:2018-02-07 16:51:25
【问题描述】:
我通过以下方式将我的 JSON 插入 Hive:
Dataset<Row> jsonData = spark.read().json("file:///root/jsonData.json");
//In reality this table has more columns, I made it shorter for the sake of readability
spark.sql("CREATE TABLE table1 ( \n" +
"`test_name` string, \n" +
"`test_timestamp` timestamp, \n" +
"`test_id` string");
jsonData.write().insertInto(table1);
执行此操作后,我在线程“main”org.apache.spark.sql.AnalysisException 中收到以下异常:由于数据类型不匹配,无法解析“CAST(test_name AS test_id)”。
我的猜测是出现此问题是因为我的 JSON 中的实体的顺序与我创建的列的顺序不同,如下所示。
以前我是这样做的:
Dataset<Row> jsonData = spark.read().json("file:///root/jsonData.json");
jsonData.createOrReplaceTempView("jsonDataTable");
Dataset<Row> showAll = spark.sql("SELECT * FROM jsonDataTable");
//Save as table jsonDataTable with overwrite
showAll.write().mode("overwrite").saveAsTable("jsonDataTable");
showAll.show();
下面的解决方案非常好,因为它会从我的 JSON 自动创建一个表,它的问题是它将所有 COLUMN TYPE 设置为字符串、结构或数组,但在某些情况下我想指定时间戳等。
我需要帮助先以某种方式创建一个表,然后在顺序无关紧要的地方插入 JSON(它不能不匹配吗?test_name -> 转到 test_name 等?)。
非常欢迎其他建议 - 目的是创建一个我指定 COLUMN TYPE 并插入 JSON 数据的表。
【问题讨论】:
-
@cricket_007 在这里标记你,我敢打赌你知道一个优雅的简单解决方案来解决我的问题。
-
样本数据????
-
@Bala 完全有效且经过验证的 JSON,实际上并没有什么特别之处。数据不是问题:/
标签: java apache-spark hive