为什么我必须将 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/