gpt4 book ai didi

json - 使用 Scala 将 DataSet 转换为 Spark Json 数组

转载 作者:行者123 更新时间:2023-12-02 20:43:35 26 4
gpt4 key购买 nike

我是 Spark 新手,无法找出以下问题的解决方案。

我有一个 JSON 文件需要解析,然后创建几个指标并将数据写回 JSON 格式。

现在以下是我正在使用的代码

import org.apache.spark.sql._
import org.apache.log4j.{Level, Logger}
import org.apache.spark.sql.functions._

object quick2 {

def main(args: Array[String]): Unit = {
Logger.getLogger("org").setLevel(Level.ERROR)
val spark = SparkSession
.builder
.appName("quick1")
.master("local[*]")
.getOrCreate()

val rawData = spark.read.json("/home/umesh/Documents/Demo2/src/main/resources/sampleQuick.json")

val mat1 = rawData.select(rawData("mal_name"),rawData("cust_id")).distinct().orderBy("cust_id").toJSON.cache()
val mat2 = rawData.select(rawData("file_md5"),rawData("mal_name")).distinct().orderBy(asc("file_md5")).toJSON.cache()

val write1 = mat1.coalesce(1).toJavaRDD.saveAsTextFile("/home/umesh/Documents/Demo2/src/test/mat1/")

val write = mat2.coalesce(1).toJavaRDD.saveAsTextFile("/home/umesh/Documents/Demo2/src/test/mat2/")
}
}

现在上面的代码正在编写正确的 json 格式。然而,矩阵也可以包含重复的结果示例:

md5   mal_name
1 a
1 b
2 c
3 d
3 e

因此,使用上面的代码,每个对象都以单行写入

像这样

{"file_md5":"1","mal_name":"a"}
{"file_md5":"1","mal_name":"b"}
{"file_md5":"2","mal_name":"c"}
{"file_md5":"3","mal_name":"d"}

等等。

但我想组合公共(public)键的数据:

所以输出应该是

{"file_md5":"1","mal_name":["a","b"]}

有人可以建议我在这里做什么吗?或者是否有其他更好的方法来解决这个问题。

谢谢!

最佳答案

  1. You can use collect_list or collect_set as per your need on mal_name column
  2. You can directly save DataFrame/DataSet directly as JSON file
import org.apache.spark.sql.functions.{alias, collect_list}
import spark.implicits._

rawData.groupBy($"file_md5")
.agg(collect_set($"mal_name").alias("mal_name"))
.write
.format("json")
.save("json/file/location/to/save")

关于json - 使用 Scala 将 DataSet 转换为 Spark Json 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45279449/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com