【问题标题】:Insert JSON to Hadoop using Spark (Java)使用 Spark (Java) 将 JSON 插入 Hadoop
【发布时间】:2018-11-30 13:41:10
【问题描述】:

我是 Hadoop 的新手,

我将 Spark 与 Java 一起使用。

我有动态 JSON,例如:

   {
    "sourceCode":"1234",
    "uuid":"df123-....",
    "title":"my title"
}{
    "myMetaDataEvent": {
        "date":"10/10/2010",
    },
    "myDataEvent": {
        "field1": {
            "field1Format":"fieldFormat",
            "type":"Text",
            "value":"field text"
        }
    }
}

有时我只能看到 field1,有时我可以看到 field1...field50

也许用户可以从此 JSON 添加字段/删除字段。

我想将这个动态 JSON 从 Spark Java 代码插入到 hadoop(到 hive 表),

我该怎么做?

我希望用户可以在进行 HIVE 查询后,即:select * from MyTable where type="Text

我每天有大约 100B 条 JSON 记录需要插入到 Hadoop,

那么推荐的方法是什么?

*我查看了以下内容:SO Question,但这是已知的 JSON 方案,但不是我的情况。

谢谢

【问题讨论】:

    标签: json apache-spark hadoop hive bigdata


    【解决方案1】:

    我遇到过类似的问题,我可以用这个解决我的问题。 (因此,如果您在解析 json 之前创建架构,这可能会有所帮助)。

    对于具有字符串数据类型的字段,您可以创建架构:-

    StructField field = DataTypes.createStructField(<name of the field>, DataTypes.StringType, true);
    

    对于具有 int 数据类型的字段,您可以创建架构:-

    StructField field = DataTypes.createStructField(<name of the field>, DataTypes.IntegerType, true);
    

    List&lt;StructField&gt; 中添加所有字段后,

    例如:-

    List<StructField> innerField = new ArrayList<StructField>();
    .... Field adding logic ....
    Eg:- 
     innerField.add(field1);
     innerField.add(field2);    
    

    // 一个实例可以来,或者多个值的实例在一个数组中,则需要放入Array Type中。

    ArrayType getArrayInnerType = DataTypes.createArrayType(DataTypes.createStructType(innerField));
    
    StructField getArrayField = DataTypes.createStructField(<name of field>, getArrayInnerType,true);
    

    然后您可以创建架构:-

    StructType structuredSchema = DataTypes.createStructType(getArrayField);
    

    然后我使用 Dataset API 生成的模式读取 json。

    Dataset<Row> dataRead = sqlContext.read().schema(structuredSchema).json(fileName);
    

    【讨论】:

    • 您好,在我使用 Dataset 阅读方案后,我使用的是 saveAsTable?我需要预先定义 Hive 表上的所有 JSON 字段吗?谢谢!
    • 是的,一旦您将数据绑定到架构,您就可以在数据集上应用任何逻辑或任何功能。 (您可以使用另存为表,也可以将数组作为 Hive 表中的数据类型,以防您需要存储数组)。
    • 谢谢,这是最快的方法吗?因为我每天大约有 100B 条 JSON 记录
    • 是的,这是我所知道的一种快速方法。可能还有其他方法可以更省时地解析它。
    • 如果它解决了您的问题,请您接受我的主要回答,以便对寻找类似信息的其他人有所帮助。
    猜你喜欢
    • 2018-11-28
    • 2016-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-18
    • 1970-01-01
    相关资源
    最近更新 更多