【问题标题】:Scala Spark: Dataset with JSON columnsScala Spark:具有 JSON 列的数据集
【发布时间】:2017-03-14 11:14:27
【问题描述】:

Spark 初学者问好!

我有一个包含多个列的 DataFrame,比如说 ID、名称和属性。它们都是字符串类型。最后一列属性包含对象某些属性的 JSON 表示。

我正在寻找某种方法来迭代 DataFrame,解析 JSON,并从每个项目中提取特定的 JSON 字段 - 并将其附加到 DataFrame 的行中。

到目前为止,有点迷茫 - 我知道 Spark 可以导入 JSON 数据集(这不是我所拥有的......)并且有一个 net.liftweb.json 库,但不幸的是我还没有找到一种方法来实现它工作 -

val users = sqlContext.table("user")
  .withColumn("parsedProperties", parse($"properties"))

返回一个 TypeMismatch - parse() 函数需要一个字符串,我正在向它发送一个列名。

请注意,我没有为此 JSON 列设置的架构。

提前谢谢你!

【问题讨论】:

标签: json scala apache-spark spark-dataframe


【解决方案1】:

你需要在这里创建一个 udf,从函数解析,然后将 udf 应用到列上。

import org.apache.spark.sql.functions.udf
val parse_udf = udf( parse _ )

val users = sqlContext.table("user")
  .withColumn("parsedProperties", parse_udf($"properties"))

【讨论】:

    【解决方案2】:

    现在工作!谢谢!

    val getEmail: String => String = parse(_).asInstanceOf[JObject].values.getOrElse("email", "").toString 
    val getEmailUDF = udf(getEmail)
    val users = sqlContext.table("user")
      .withColumn("email", getEmailUDF($"properties"))
    

    【讨论】:

      猜你喜欢
      • 2020-02-09
      • 2020-12-30
      • 2021-08-17
      • 2020-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-14
      • 1970-01-01
      相关资源
      最近更新 更多