PySpark - 如何输出带有特定字段的 JSON?
Posted
技术标签:
【中文标题】PySpark - 如何输出带有特定字段的 JSON?【英文标题】:PySpark - How to output JSON with specific fields? 【发布时间】:2016-09-08 09:05:37 【问题描述】:JSON 格式如下:
"name": "aaa",
"address":
"street": "blv abc",
"street_num": "122"
我会从 parquet 文件中读取数据并对它们执行 sql 查询,例如查找所有住在街道 blv abc
的人。但我只想将name
和address.street
输出为:
"name": "aaa",
"address":
"street": "blv abc"
如何只输出name
和address.street
?
DataFrameReader 架构可能对我不起作用,因为我需要在输出之前执行一些 SQL 查询,这可能需要在 street_num
上进行过滤。
【问题讨论】:
您到底想做什么?将 JSON 转换为没有 street_num 的新 JSON?您能否提供您的代码,显示您尝试做什么?record = sqlContext.read.parquet("file.json")
sqlContext.registerDataFrameAsTable(record, "record")
sqlContext.sql("select * from record where street == 'blv abc'")
【参考方案1】:
我对这种不寻常的数据转换的最后手段是
from pyspark.sql.types import Row
def transform(row):
d = row.asDict() # now in python data types
del d['address']['street_num']
return Row(**d)
new = dataframe.rdd.map(transform)
我想你想删除很多字段以保持记录精简,否则它并不值得。
【讨论】:
是的。我有一个很大的 json,只想在过滤后输出几个字段。谢谢!以上是关于PySpark - 如何输出带有特定字段的 JSON?的主要内容,如果未能解决你的问题,请参考以下文章
在 pyspark 中,基于变量字段进行分组,并为特定值添加一个计数器(当变量更改时重置)