Добавить поля в набор данных JSON Java-Spark - PullRequest
0 голосов
/ 04 сентября 2018

Я использую Java-Spark для загрузки JSON в Dataset следующим образом:

 Dataset<Row> df = spark.read().json(jsonFile);

Допустим, мой JSON выглядит так:

{
    "field1":
    {
        "key1":"value1"
    }
 }

Теперь я хочу добавить новое поле, чтобы мой JSON выглядел следующим образом:

{
    "field1":
    {
        "key1":"value1",
        "key2":"value2"
    }
 }

Итак, что я сделал, это:

df = df.withColumn("field1.key2", function.lit("value2"));

Но мой JSON выглядит так:

{
    "field1":
    {
        "key1":"value1"
    },
     "field1.key2":"value2"
}

Так как я могу это исправить?

Спасибо.

1 Ответ

0 голосов
/ 04 сентября 2018

одна опция может быть, вы можете прочитать файлы как текстовый файл и в рамках операции карты, вы можете использовать создание объекта json и внести необходимые изменения в запись, что-то вроде ниже:

import org.json.JSONObject

val input = sparkSession.sparkContent.textFile("<input_file_path>")

val resultRDD = input.map(row => {

    val json = new JSONObject(row)
    json.getJSONObject("field1").put("key2", "value2")

    json.toString
})

val resultDF = sparkSession.read.json(resultRDD)
resultDF.printSchema()
...