我正在努力从Azure数据块发出的作业日志json中提取数据。json中的一个条目包含类似于字典的东西,但不完全是,我无法找到一种优雅的-内联-提取此数据的方法。我正在使用scala并在scala中创建一个结构,以反映作业日志的层次结构。有三个数据元素包含这种格式的字符串,一个例子是:
"response": "{\\"statusCode\\":200}"
如果不是因为反斜杠转义了引号和字符串开头和结尾的双引号,它将成为一个很好的JSON结构。
我做了很多互联网搜索,但没有找到描述这种字符串格式的单词,所以搜索产生了大量不相关的结果。
我尝试了一些正则表达式来预处理它,使其看起来像json结构,但它不起作用。这是我尝试的:
case class cls_logJSON(value:String)
var df2 = df.withColumn("value",regexp_replace(col("value"), "\\\\", "")).as[cls_logJSON]
df2 = df.withColumn("value",regexp_replace(col("value"), " \"{", " {")).as[cls_logJSON]
df2 = df.withColumn("value",regexp_replace(col("value"), "}\",", "},")).as[cls_logJSON]
这不是我喜欢看到的代码,我希望这个字符串格式是某种标准,可以用适当的数据类型或类似的东西访问。我从这些JSON行创建的dataframe中提取数据,并可以使用点表示法(如properties.sourceIPAddress
)访问其他数据,当然,我可以将此数据作为字符串获取,但是我试图避免在 Dataframe 的每一行上出现某种rbar循环。任何帮助都非常感谢。
1条答案
按热度按时间oxcyiej71#
我不是100%我想去的地方,但我确实找到了一种方法来提取这些数据到dataframe中。在我看来,奇怪的是,数据被格式化为外部json对象中的json对象,并且可以如下访问。我想把一些处理串或链在一起,但我不知道如何做到这一点,所以我有三个步骤来获取我需要的数据。下面是代码。'from_json'函数能够提取这个奇怪格式的列数据: