pyspark一次读取多个csv文件

Cdr*_*Cdr 17 hive apache-spark pyspark

我正在使用 SPARK 读取 hdfs 中的文件。有一种情况,我们从遗留系统中以 csv 格式获取文件作为块。

ID1_FILENAMEA_1.csv
ID1_FILENAMEA_2.csv
ID1_FILENAMEA_3.csv
ID1_FILENAMEA_4.csv
ID2_FILENAMEA_1.csv
ID2_FILENAMEA_2.csv
ID2_FILENAMEA_3.csv
Run Code Online (Sandbox Code Playgroud)

该文件使用 HiveWareHouse Connector 加载到 HIVE 中的 FILENAMEA,几乎不需要添加默认值等转换。同样,我们有大约 70 张桌子。Hive 表以 ORC 格式创建。表根据 ID 进行分区。现在,我正在一一处理所有这些文件。这需要很多时间。

我想让这个过程更快。文件将以 GB 为单位。

有没有办法同时读取所有 FILENAMEA 文件并将其加载到 HIVE 表中。

Vin*_*oba 24

您有两种方法可以在 pyspark 中读取多个 CSV 文件。如果所有 CSV 文件都位于同一目录中并且都具有相同的架构,则可以通过直接传递目录路径作为参数来立即读取,如下所示:

spark.read.csv('hdfs://path/to/directory')
Run Code Online (Sandbox Code Playgroud)

如果 CSV 文件位于不同位置或 CSV 文件位于同一目录但其中包含其他 CSV/文本文件,则可以将它们作为表示.csv()方法参数中的路径列表的字符串传递,如下所示:

spark.read.csv('hdfs://path/to/filename1,hdfs://path/to/filename2')
Run Code Online (Sandbox Code Playgroud)

您可以在此处了解有关如何使用 Spark 读取 CSV 文件的更多信息

如果您需要从 HDFS 目录中的文件列表构建此路径列表,您可以查看此答案,创建路径列表后,您可以将其转换为字符串以传递给.csv()方法','.join(your_file_list)

  • 是的,就性能而言,继续下去会很好。Spark 就是为此类用例而设计的。 (2认同)
  • 在spark2.0中这不起作用。对于 Spark 2.0,您需要执行以下操作: ```spark.read.csv(['hdfs://path/to/filename1','hdfs://path/to/filename2'])``` (2认同)