当前位置: 首页 > 知识库问答 >
问题:

从Pyspark中的多个目录读取拼花文件

郑曜灿
2023-03-14

我需要从不是父目录或子目录的多个路径读取拼花地板文件。

例如,

dir1 ---
       |
       ------- dir1_1
       |
       ------- dir1_2
dir2 ---
       |
       ------- dir2_1
       |
       ------- dir2_2

sqlContext。阅读拼花(dir1)从dir1\u 1和dir1\u 2读取拼花文件

现在,我正在读取每个目录并使用“unionAll”合并数据帧。有没有一种方法可以不使用unionAll从dir1\u 2和dir2\u 1读取拼花地板文件,或者有没有什么奇特的方法可以使用unionAll

谢谢

共有3个答案

鄢雅畅
2023-03-14

如果您有列表文件,您可以执行以下操作:

files = ['file1', 'file2',...]
df = spark.read.parquet(*files)
郑承恩
2023-03-14

SQLContext的parquetFile方法和DataFrameReader的parque方法都采用多条路径。所以这两种方法中的任何一种都有效:

df = sqlContext.parquetFile('/dir1/dir1_2', '/dir2/dir2_1')

df = sqlContext.read.parquet('/dir1/dir1_2', '/dir2/dir2_1')
端木弘方
2023-03-14

有点晚了,但我在搜索时发现了这个,它可能会帮助其他人。。。

您还可以尝试将参数列表解压缩到spark。阅读拼花地板()

paths=['foo','bar']
df=spark.read.parquet(*paths)

如果要将几个blob传递到path参数中,这很方便:

basePath='s3://bucket/'
paths=['s3://bucket/partition_value1=*/partition_value2=2017-04-*',
       's3://bucket/partition_value1=*/partition_value2=2017-05-*'
      ]
df=spark.read.option("basePath",basePath).parquet(*paths)

这很酷,因为您不需要列出basePath中的所有文件,而且仍然可以进行分区推断。

 类似资料: