使用Spark Scala将数组[Byte]转换为JSON格式
我正在读一个.avro文件,其中特定列的数据是二进制格式的。为了便于阅读,我目前正在UDF的帮助下将二进制格式转换为字符串格式,最后我需要将其转换为JSON格式,以便进一步解析数据。是否有一种方法可以使用Spark Scala代码将字符串对象转换为JSON格式 任何帮助都将不胜感激使用Spark Scala将数组[Byte]转换为JSON格式,json,scala,apache-spark,apache-spark-sql,spark-avro,Json,Scala,Apache Spark,Apache Spark Sql,Spark Avro,我正在读一个.avro文件,其中特定列的数据是二进制格式的。为了便于阅读,我目前正在UDF的帮助下将二进制格式转换为字符串格式,最后我需要将其转换为JSON格式,以便进一步解析数据。是否有一种方法可以使用Spark Scala代码将字符串对象转换为JSON格式 任何帮助都将不胜感激 val avroDF = spark.read.format("com.databricks.spark.avro"). load("file:///C:/46.avro") import org.apache.s
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}
我希望的输出如下所示:
我不知道您是否需要通用解决方案,但在您的特定情况下,您可以编写如下代码:
spark.read.json(newDF.as[String])
.withColumn("RPM", explode(col("RPM")))
.withColumn("E", col("RPM.E"))
.withColumn("V", col("RPM.V"))
.drop("RPM")
.show()
你的身体不是已经是json格式了吗?如果您希望将该json字符串转换为正确的数据帧,则可能会有所帮助。请参阅将json字符串转换为正确的数据帧(无需使用
spark.read.json()
)重新读取数据)