scala - 在 JSON 中读取字典

标签 scala apache-spark apache-spark-sql

这是我的 JSON

[{"dict": {"key": "value1"}}, {"dict": {"key": "value2"}}]

这是我的解析代码:
val mdf = sparkSession.read.option("multiLine","true").json("multi2.json")
mdf.show(false)

这输出:
+--------+
|dict    |
+--------+
|[value1]|
|[value2]|
+--------+

我想查看名称-值对?键和值。

我该怎么做呢?

谢谢

最佳答案

如果您只想扩展数据 select dict.* (请注意,该选项名为 multiline 而不是 multiLine ):

val df = spark.read.option("multiline", "true").json("multi2.json")
df.select($"dict.*").show

// +------+
// |   key|
// +------+
// |value1|
// |value2|
// +------+

如果您想将其视为字典,只需提供架构:
import org.apache.spark.sql.types._

val schema = StructType(Seq(
  StructField("dict", MapType(StringType, StringType))
))

val dfm = spark.read
  .schema(schema)
  .option("multiline", "true")
  .json("multi2.json")

dfm.show
// +------------------+
// |              dict|
// +------------------+
// |Map(key -> value1)|
// |Map(key -> value2)|
// +------------------+

如果你想要每行一对,只需分解结果:
import org.apache.spark.sql.functions._

dfm.select(explode(col("dict"))).show
// +---+------+
// |key| value|
// +---+------+
// |key|value1|
// |key|value2|
// +---+------+

关于scala - 在 JSON 中读取字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49656889/

相关文章:

scala - Apache Spark-从Elasticsearch加载数据太慢

python - 如何计算pyspark中的日期差异?

scala - Play Framework 2.1.1 不解决依赖关系

mysql - 如何使用 cassandra 中另一个表的选择插入到 cassandra 表中?

apache-spark - 如何在字符串第一次出现时拆分列?

hadoop - 如何在 Spark 中使用 Kryo 注册 InternalRow

hadoop - 在 Spark-on-Yarn 中配置执行器和驱动程序内存

scala - Spark 中有哪些不同的联接类型?

java - 在 java 中使用单独的测试项目的 Scala 的代码覆盖率

java - Rectangle2D.contains() 无法正确检测边界中的坐标