如何在Pyspark中将多个json文件转换为单个csv

ki0zmccv  于 2022-11-21  发布在  Spark
关注(0)|答案(1)|浏览(138)

我在ADLS中有多个文件,我想将它们转换为单个csv,但不使用Pandas。是否可以使用Pyspark转换它们?

这些文件来自API,其中有225000条记录。我正在使用此脚本将其转换为csv

nmpmafwu

nmpmafwu1#

您可以将所有JSON文件放在一个文件夹中,然后使用以下命令导入所有JSON文件:spark.read.option("multiLine", True).json("/path/to/folder") .
然而,将JSON文件导入dataframe有点棘手,因为您可能无法获得所需的格式,并且您可能必须在导入之前预处理JSON文件或在导入后预处理Spark dataframe。
例如,假设每个大洲的JSON文件:

NA.json
{
    "US" : {
        "capital": "Washington, D.C.",
        "population in million": 330
    },
    "Canada" : {
        "capital": "Ottawa",
        "population in million": 38
    }
}

EU.json
{
    "England" : {
        "capital": "London",
        "population in million": 56
    },
    "France" : {
        "capital": "Paris",
        "population in million": 67
    }
}

AUS.json
{
    "Australia" : {
        "capital": "Canberra",
        "population in million": 25
    },
    "New Zealand" : {
        "capital": "Wellington",
        "population in million": 5
    }
}

导入这些文件时,根JSON对象Map到每一列,嵌套JSON数据Map为嵌套Map:

df = spark.read.option("multiLine", True).json("/content/sample_data/json")

+--------------+------------+------------+-----------+---------------+--------------------+
|     Australia|      Canada|     England|     France|    New Zealand|                  US|
+--------------+------------+------------+-----------+---------------+--------------------+
|{Canberra, 25}|        null|        null|       null|{Wellington, 5}|                null|
|          null|{Ottawa, 38}|        null|       null|           null|{Washington, D.C....|
|          null|        null|{London, 56}|{Paris, 67}|           null|                null|
+--------------+------------+------------+-----------+---------------+--------------------+

根据JSON文件的结构,您必须处理两件事:

  • 将JSON对象Map到通用模式,以防止出现上面提到的碎片列名。
  • 防止将嵌套数据Map为嵌套Map类型,如上面{Canberra, 25}所示您可能需要转换此类型以将所有数据转换为表格形式

相关问题