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 的人。但我只想将nameaddress.street 输出为:


  "name": "aaa",
  "address": 
    "street": "blv abc"
  

如何只输出nameaddress.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:读取带有双引号和逗号的字段的csv文件

在 pyspark 中,基于变量字段进行分组,并为特定值添加一个计数器(当变量更改时重置)

带有架构的 pyspark.sql SparkSession load() :架构中的非字符串类型字段使所有值都为空

Pyspark:将df写入具有特定名称的文件,绘制df

如何阅读pyspark中的特定列?

pyspark:将多个数据框字段传递给 udf