为什么我必须将rdd转换为df才能将其写成Parquet、avro或其他类型?我知道写rdd是因为不支持这些格式。我实际上是想写一个Parquet文件,第一行只包含头日期,其他行包含细节记录。示例文件布局
2019-04-06
101,peter,20000
102,robin,25000
我想用上面的内容创建一个Parquet地板。我已经有一个csv文件sample.csv与上述内容。当读取为Dataframe时,csv文件只包含第一个字段,因为第一行只有一列。
rdd = sc.textFile('hdfs://somepath/sample.csv')
df = rdd.toDF()
df.show()
订单号:
2019-04-06
101
102
有人能帮我把rdd的全部内容转换成Dataframe吗。即使我尝试直接读取文件作为df而不是从rdd转换,同样的事情也会发生。
1条答案
按热度按时间czfnxgou1#
您的文件在spark的reader中只有“一列”,因此Dataframe输出将仅为该列。
您不一定做了什么错误,但是如果您希望有多个列,那么您的输入文件的格式是错误的,如果是这样,您应该使用
spark.csv()
而不是sc.textFile()
为什么我必须将rdd转换为df才能将其写成Parquet、avro或其他类型?因为这些类型需要一个模式,而rdd没有。
尝试编写一个Parquet文件,第一行只包含头日期,其他行包含细节记录
csv文件头需要描述所有列。所有行上方不能有孤岛标头。
parqeut/avro/orc/json不能没有csv这样的列标题,但同样适用。