【问题标题】:Convert Array[Byte] to JSON format using Spark Scala使用 Spark Scala 将 Array[Byte] 转换为 JSON 格式
【发布时间】:2020-01-08 23:48:59
【问题描述】:

我正在读取一个 .avro 文件,其中特定列的数据是二进制格式。我目前在 UDF 的帮助下将二进制格式转换为字符串格式以实现可读性,最后我需要将其转换为 JSON 格式以进一步解析数据。有没有办法可以使用 Spark Scala 代码将字符串对象转换为 JSON 格式。

任何帮助将不胜感激。

val avroDF = spark.read.format("com.databricks.spark.avro").
load("file:///C:/46.avro")

import org.apache.spark.sql.functions.udf

// Convert byte object to String format

val toStringDF = udf((x: Array[Byte]) => new String(x))


val newDF = avroDF.withColumn("BODY", 
toStringDF(avroDF("body"))).select("BODY")

newDF 的输出如下所示:

BODY                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
+---------------------------------------------------------------------------------------------------------------+
|{"VIN":"FU74HZ501740XXXXX","MSG_TYPE":"SIGNAL","TT":0,"RPM":[{"E":1566800008672,"V":1073.75},{"E":1566800002538,"V":1003.625},{"E":1566800004084,"V":1121.75}

我想要的输出应该如下所示:

【问题讨论】:

  • 你的body不是已经是json格式了吗?如果您正在寻找将该 json 字符串转换为正确的数据框,那么 this 可能会有所帮助。
  • 查看 from_json 将您的 JSON 字符串转换为正确的数据帧(无需使用 spark.read.json() 重新读取数据)

标签: json scala apache-spark apache-spark-sql spark-avro


【解决方案1】:

我不知道您是否需要通用解决方案,但在您的特定情况下,您可以编写如下代码:

spark.read.json(newDF.as[String])
    .withColumn("RPM", explode(col("RPM")))
    .withColumn("E", col("RPM.E"))
    .withColumn("V", col("RPM.V"))
    .drop("RPM")
    .show()

【讨论】:

    猜你喜欢
    • 2017-12-29
    • 2023-01-21
    • 2014-04-18
    • 2021-07-24
    • 2014-07-21
    • 2019-04-04
    • 2020-01-21
    • 1970-01-01
    • 2020-02-28
    相关资源
    最近更新 更多