我正在使用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
这些文件是使用HiveWareHouse连接器加载到HIVE中的FILENAMEA中的,只需要很少的转换,比如添加默认值。同样,我们有大约70个表。Hive表是以ORC格式创建的。表是按ID分区的。现在,我正在逐个处理所有这些文件。这需要很多时间。
我想让这个过程更快。文件将在GB。
是否有办法同时读取所有FILENAMEA文件并将其加载到HIVE表中。
2条答案
按热度按时间uqjltbpv1#
在pyspark中有两种方法可以读取多个CSV文件,如果所有的CSV文件都在同一个目录下,并且都有相同的schema,可以直接将目录的路径作为参数传递,一次读取多个CSV文件,如下所示:
如果CSV文件在不同的位置,或者CSV文件在同一个目录中,但有其他CSV/文本文件,您可以将它们作为
.csv()
方法参数中表示路径列表的字符串传递,如下所示:您可以获得有关如何使用Spark here读取CSV文件的详细信息
如果需要从HDFS目录中的文件列表构建此路径列表,可以查看this answer。创建路径列表后,可以将其转换为字符串,以通过
','.join(your_file_list)
传递给.csv()
方法tzdcorbm2#
使用:
spark.read.csv(["path1","path2","path3"...])
可以从不同的路径读取多个文件,但这意味着您必须首先创建一个路径列表,该列表不是逗号分隔的文件路径字符串