我在linux上有一个包含数千个CSV文件的本地文件夹。
每个csv文件大约为1mb。
这些文件共享相同的列/格式,它们由文件名本身区分(即xxx_1.csv,xxx_2.csv,xxx_3,csv等)
现在,我想将目录加载到HDFS中,并将其保存为parquet格式。
在python(spark 2.3)中执行此操作的正确方法是什么?
加载整个目录的最佳方法是什么?
我应该使用什么分区?(文件名应该是分区吗?还是将文件名添加为新列更好?)
Spark已经读取了整个目录,并且可以在Parquet中写出整个数据帧
df = spark.read.csv("file:///local_csv_dir")
df.write.parquet("hdfs:///other/dir")
我不认为read.csv甚至可以访问文件名,所以我认为你不能通过这种方式进行分区。理想情况下,您使用低基数(几个唯一值)对数据中的字段进行分区
一种可以说是“更好”的方法是将所有CSV文件放入一个大型BZ2存档中,然后将其放在HDFS上。然后,您可以并行读取该文件,并在Hadoop中写入不同的格式或直接处理它们
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。