Pyspark-遍历字符串以提取多个键值对

问题描述 投票:2回答:1

我目前有一个用&号分隔的文本字符串,我需要使用PySpark进行解析以将键/值对提取到数组/字典中。我可以使用字符串中的大多数标签来执行此操作,但是问题是某些键具有索引,并且每个记录可能有所不同,但是键始终是相同的(如果这样的话)。想做的是,遍历字符串

示例输入:

"{pr1nm=Apples&pr1id=1111111&pr1pr=200.00&pr1qt=1&pr2nm=Pears&pr2id=1111112&pr2pr=300.00&pr2qt=2}"

所需的输出:

[{
  "ProductName":"Apples",
  "ProductId": "1111111",
  "ProductPrice":"200.00",
  "ProductQuantity":"1",
  "ProductName":"Pears",
  "ProductId":"1111112",
  "ProductPrice":"300.00"
  "ProductQuantity":"2"
}]

此外,如果我在同一字符串中还有其他与产品无关的标签,例如:

"{dl=https://stackoverflow.com/posts/XXXXX&t=pageview&pr1nm=Apples&pr1id=1111111&pr1pr=200.00&pr1qt=1&pr2nm=Pears&pr2id=1111112&pr2pr=300.00&pr2qt=2}"

输出应该是这样,嵌套数组中的产品:

{"DocumentLocation":"https://stackoverflow.com/posts/XXXXX", "HitType":"pageview", "Products": [{ "ProductName":"Apples", "ProductId": "1111111", "ProductPrice":"200.00", "ProductQuantity":"1", "ProductName":"Pears", "ProductId":"1111112", "ProductPrice":"300.00" "ProductQuantity":"2" }] }

pyspark pyspark-sql pyspark-dataframes
1个回答
1
投票

您可以使用str_to_map将字符串转换为映射列,如下所示:

str_to_map

然后,如果需要JSON字符串,请使用df = df.withColumn("input", expr("ltrim('{', rtrim('}', input))"))\ .withColumn("input", expr("str_to_map(input, '&', '=')")) df.show(truncate=False) +-------------------------------------------------------------------------------------------------------------------------------+ |input | +-------------------------------------------------------------------------------------------------------------------------------+ |[pr1nm -> Apples, pr1id -> 1111111, pr1pr -> 200.00, pr1qt -> 1, pr2nm -> Pears, pr2id -> 1111112, pr2pr -> 300.00, pr2qt -> 2]| +-------------------------------------------------------------------------------------------------------------------------------+ 函数:

to_json
© www.soinside.com 2019 - 2024. All rights reserved.