如何复制和转换Parquet文件到csv

f2uvfpb9  于 2021-05-29  发布在  Hadoop
关注(0)|答案(3)|浏览(392)

我有权访问一个hdfs文件系统,可以看到Parquet文件与

hadoop fs -ls /user/foo

如何将这些Parquet文件复制到本地系统并将其转换为csv以便使用它们?这些文件应该是简单的文本文件,每行有许多字段。

2uluyalo

2uluyalo1#

更具动态性的表单的代码段,因为您可能不知道Parquet文件的名称,将是:

for filename in glob.glob("[location_of_parquet_file]/*.snappy.parquet"):
        print filename
        df = sqlContext.read.parquet(filename)
        df.write.csv("[destination]")
        print "csv generated"
lc8prwob

lc8prwob2#

尝试

df = spark.read.parquet("/path/to/infile.parquet")
df.write.csv("/path/to/outfile.csv")

相关api文件:
pyspark.sql.dataframereader.parquet
pyspark.sql.dataframewriter.csv
两者 /path/to/infile.parquet 以及 /path/to/outfile.csv 应该是hdfs文件系统上的位置。您可以指定 hdfs://... 或者您可以忽略它,因为它通常是默认方案。
你应该避免使用 file://... ,因为本地文件对群集中的每台计算机都意味着不同的文件。输出到hdfs,然后使用命令行将结果传输到本地磁盘:

hdfs dfs -get /path/to/outfile.csv /path/to/localfile.csv

或直接从hdfs显示:

hdfs dfs -cat /path/to/outfile.csv
wwodge7n

wwodge7n3#

如果在配置单元中的那些Parquet文件上定义了一个表(或者如果您自己定义了这样的表),则可以对其运行配置单元查询并将结果保存到csv文件中。试着做一些类似的事情:

insert overwrite local directory dirname
  row format delimited fields terminated by ','
  select * from tablename;

替代品 dirname 以及 tablename 实际值。请注意,指定目录中的任何现有内容都将被删除。有关详细信息,请参阅从查询将数据写入文件系统。

相关问题