Scala Spark:带有JSON列的数据集

时间:2017-03-14 02:21:02

标签: json scala apache-spark spark-dataframe

来自Spark初学者的问候!

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

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

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

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

返回一个TypeMismatch - parse()函数需要一个String,并且我发送一个列名。

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

提前谢谢!

2 个答案:

答案 0 :(得分: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"))

答案 1 :(得分:0)

立即行动!谢谢!

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