如何从json字符串中提取值?
问题描述:
我有一个文件,该文件包含一堆列,一个名为jsonstring
的列是字符串类型,其中包含json字符串……可以说格式如下:
I have a file which has bunch of columns and one column called jsonstring
is of string type which has json strings in it… let's say the format is the following:
{
"key1": "value1",
"key2": {
"level2key1": "level2value1",
"level2key2": "level2value2"
}
}
我想将此列解析如下:jsonstring.key1,jsonstring.key2.level2key1返回value1,level2value1
I want to parse this column something like this: jsonstring.key1,jsonstring.key2.level2key1 to return value1, level2value1
我该如何在scala或spark sql中做到这一点.
How can I do that in scala or spark sql.
答
您可以使用withColumn + udf + json4s :
You can use withColumn + udf + json4s:
import org.json4s.{DefaultFormats, MappingException}
import org.json4s.jackson.JsonMethods._
import org.apache.spark.sql.functions._
def getJsonContent(jsonstring: String): (String, String) = {
implicit val formats = DefaultFormats
val parsedJson = parse(jsonstring)
val value1 = (parsedJson \ "key1").extract[String]
val level2value1 = (parsedJson \ "key2" \ "level2key1").extract[String]
(value1, level2value1)
}
val getJsonContentUDF = udf((jsonstring: String) => getJsonContent(jsonstring))
df.withColumn("parsedJson", getJsonContentUDF(df("jsonstring")))