pyspark:如何 get_json_object 用于带空格的名称(或名称中的其他奇怪字符)?
pyspark: how to get_json_object for names with spaces (or other weird characters in the name)?
通常,
F.get_json_object(name, "$.element_name")
可以很好地从这样的 JSON 对象中提取 element_name
{"element_name" : 1}
但是如果名称中有 space 怎么办?怎么引用名字?
{"element name" : 1}
这显然行不通
F.get_json_object(name, "$.elementname")
通常,这不是 pyspark 特有的问题,但似乎 pyspark(可能 java)的 jsonpath 规范可能略有不同。
对于名称对属性不友好的 JSON 键,您需要使用索引器语法。
$["element name"]
(单引号也应该有效。)
对于 Spark,以下两个之一应该有效:(1) dot-notation .name
名称不包含任何点 .
或左括号 [
;或 (2) bracket-notation ['name']
名称不包含任何单引号 '
或 question-mark ?
,例如:
F.get_json_object('name', "$['element name']")
F.get_json_object('name', "$.element name")
请参阅下面来自 source code 的 Scala JsonPathParser:
// parse `.name` or `['name']` child expressions
def named: Parser[List[PathInstruction]] =
for {
name <- '.' ~> "[^\.\[]+".r | "['" ~> "[^\'\?]+".r <~ "']"
} yield {
Key :: Named(name) :: Nil
}
因此,如果名称包含点或左括号,则使用['name']
,如果名称包含单引号或问号,使用.name
。否则你可以 select 任一个。更多工作表达式示例:
F.get_json_object('name', "$.Trader Joe's")
F.get_json_object('name', "$['amazon.com']")
通常,
F.get_json_object(name, "$.element_name")
可以很好地从这样的 JSON 对象中提取 element_name
{"element_name" : 1}
但是如果名称中有 space 怎么办?怎么引用名字?
{"element name" : 1}
这显然行不通
F.get_json_object(name, "$.elementname")
通常,这不是 pyspark 特有的问题,但似乎 pyspark(可能 java)的 jsonpath 规范可能略有不同。
对于名称对属性不友好的 JSON 键,您需要使用索引器语法。
$["element name"]
(单引号也应该有效。)
对于 Spark,以下两个之一应该有效:(1) dot-notation .name
名称不包含任何点 .
或左括号 [
;或 (2) bracket-notation ['name']
名称不包含任何单引号 '
或 question-mark ?
,例如:
F.get_json_object('name', "$['element name']")
F.get_json_object('name', "$.element name")
请参阅下面来自 source code 的 Scala JsonPathParser:
// parse `.name` or `['name']` child expressions
def named: Parser[List[PathInstruction]] =
for {
name <- '.' ~> "[^\.\[]+".r | "['" ~> "[^\'\?]+".r <~ "']"
} yield {
Key :: Named(name) :: Nil
}
因此,如果名称包含点或左括号,则使用['name']
,如果名称包含单引号或问号,使用.name
。否则你可以 select 任一个。更多工作表达式示例:
F.get_json_object('name', "$.Trader Joe's")
F.get_json_object('name', "$['amazon.com']")