如何将csv目录加载到hdfs作为实木复合地板

时间:2018-11-20 14:22:16

标签: csv apache-spark pyspark hdfs parquet

我在Linux上有一个本地文件夹,其中包含成千上万个CSV文件。

每个csv文件约为1mb。

文件共享相同的列/格式,并通过文件名本身(即xxx_1.csv,xxx_2.csv,xxx_3,csv等)加以区分

现在,我想将目录加载到HDFS中,并以镶木地板格式保存。

在python(spark 2.3)中执行此操作的正确方法是什么?

  1. 加载整个目录的最佳方法是什么?
  2. 我应该使用什么分区? (文件名应该是分区吗?还是最好将文件名添加为新列?)

谢谢

1 个答案:

答案 0 :(得分:1)

Spark已经可以读取整个目录,并且可以将整个数据帧写入Parquet中

df = spark.read.csv("file:///local_csv_dir")
df.write.parquet("hdfs:///other/dir")

read.csv甚至可以访问文件名,因此我认为您不能通过这种方式进行分区。

您可以使用withColumninput_file_name函数添加文件名,但是,理想情况下,您应该以低基数(少数唯一值)对数据中的字段进行分区

一种可以说是“更好”的方法是将所有CSV文件放入一个大型BZ2存档中,然后将其放在HDFS中。然后,您可以在Hadoop内并行读取一个文件,并写入不同的格式,或直接对其进行处理