在 spark 中使用自定义模式读取 json 文件不返回结果

问题描述 投票:0回答:0

我是 emr/hdfs/hive/spark 世界的新手。我有一组大型 json 文件(每个文件 > 50GB),我试图加载这些文件以查询特定的键。 json 文件有一个标准布局,但并非所有文件都包含所有键。我创建了一个包含整个标准的自定义模式,并使用该模式创建了一个数据框。当我尝试读取/查询 json 文件时,只返回空值。我正在尝试 POC 使用配置单元/火花在 EMR 集群中加载文件。有没有更好的方法来处理 TB 级的 json 文件?

为了简化问题,假设完整的标准是: reporting_entity_name 字符串 reporting_entity_type 字符串 版本字符串

文件 A 将具有 reporting_entity_name 和版本,但没有 reporting_entity_type。 文件 B 将具有 reporting_entity_name 和 reporting_entity_type 但没有版本。

问题是: scala> spark.sqlContext.sql("SELECT reporting_entity_name,reporting_entity_type,version FROM vw ").show()

我需要文件A返回:

+---------------------+---------------------+-------+

|reporting_entity_name|reporting_entity_type|version| +--------------------+--------------------+----- --+ | Mega Company Inc ...|空 | 1.3.1 | +--------------------+--------------------+----- --+

和文件 B 返回: +--------------------+--------------------+----- --+ |reporting_entity_name|reporting_entity_type|version| +--------------------+--------------------+----- --+ | Mega Company Inc ...|健康保险...|空 | +--------------------+--------------------+----- --+

但是两个文件返回的是: +--------------------+--------------------+----- --+ |reporting_entity_name|reporting_entity_type|version| +--------------------+--------------------+----- --+ |空 |空 |空 | +--------------------+--------------------+----- --+

实际的标准json比上面的例子要复杂,可以在这里找到: https://github.com/CMSgov/price-transparency-guide/tree/master/schemas/in-network-rates#providers-object

可在此处找到(上述标准的)小示例文件: https://webtpa-public-access.s3.us-west-2.amazonaws.com/subfolder/2023-04_070_09B0_in-network-rates_01_of_122.json.gz

apache-spark hive amazon-emr
© www.soinside.com 2019 - 2024. All rights reserved.