来自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列的设置架构。
提前谢谢!
答案 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"))