hadoop - parquet、avro 和其他 hadoop 文件格式的第一行可以有不同的布局吗?

标签 hadoop pyspark schema avro parquet

为什么我必须将 RDD 转换为 DF 才能将其编写为 parquet、avro 或其他类型?我知道写 RDD 因为不支持这些格式。我实际上是在尝试编写一个 Parquet 文件,第一行仅包含标题日期,其他行包含详细记录。示例文件布局

2019-04-06
101,peter,20000
102,robin,25000

我想用上面的内容创建一个 Parquet 。我已经有一个包含上述内容的 csv 文件 sample.csv。作为数据帧读取时的 csv 文件仅包含第一个字段,因为第一行只有一列。

rdd = sc.textFile('hdfs://somepath/sample.csv')
df = rdd.toDF()
df.show()

对/对:

2019-04-06
101
102

有人可以帮我将 rdd 的全部内容转换成数据框吗?即使当我尝试直接将文件作为 df 读取而不是从 rdd 转换时,同样的事情也会发生。

最佳答案

您的文件在 Spark 的阅读器中只有“一列”,因此数据帧输出只会是那一列。

您不一定做错任何事,但如果您希望有多于一列,则您的输入文件格式不正确,如果是这样,您应该改用 spark.csv()sc.textFile()

Why do I have to convert an RDD to DF in order to write it as parquet, avro or other types?

因为这些类型需要模式,而 RDD 没有。

trying to write a parquet file with first line containing only the header date and other lines containing the detail records

CSV 文件标题需要描述所有列。所有行上方不能有孤立的标题。

Parqeut/Avro/ORC/JSON 不能像 CSV 那样没有列标题,但同样适用。

关于hadoop - parquet、avro 和其他 hadoop 文件格式的第一行可以有不同的布局吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55547327/

相关文章:

hadoop - HUE共享工作流程作业的权限问题

pandas - Pyspark:相当于 np.where

mysql - 在MySQL中存储数据以供按日期范围查询

hadoop - 使用 hadoop 接近实时

java - 映射 : expected . 中的键类型不匹配。文本,收到... LongWritable

apache-spark -\列出 Spark 当前 session /内存中的所有数据帧

apache-spark - SQL 类似于 PySpark 数据帧的 NOT IN 子句

hadoop - pig 中的资源模式和模式之间的区别

mysql - SQL 模式设计建议

hadoop - 我们可以在 hdfs 文件系统中指定 DATANODE 的大小吗