我可以访问HDFS文件系统,可以看到带有Parquet文件的内容。
hadoop fs -ls /user/foo
如何将这些parquet文件复制到我的本地系统并将它们转换为csv,以便我可以使用它们?这些文件应该是每行具有多个字段的简单文本文件。
我可以访问HDFS文件系统,可以看到带有Parquet文件的内容。
hadoop fs -ls /user/foo
如何将这些parquet文件复制到我的本地系统并将它们转换为csv,以便我可以使用它们?这些文件应该是每行具有多个字段的简单文本文件。
df = spark.read.parquet("/path/to/infile.parquet")
df.write.csv("/path/to/outfile.csv")
相关的API文档:
/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
insert overwrite local directory dirname row format delimited fields terminated by ',' select * from tablename;请使用实际值替换
dirname
和tablename
。请注意,指定目录中的任何现有内容都将被删除。有关详细信息,请参见从查询中将数据写入文件系统。为了创建更加动态的表单,因为您可能不知道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"
hdfs://...
。应避免使用file://...
,因为本地文件对于集群中的每台机器来说都是不同的文件。相反,输出到 HDFS,然后如果确实需要,可以使用命令行将结果传输到本地磁盘。 - Zoltan