spark 1.6:将Dataframe存储到hdfs中的多个csv文件中(按id分区)

lfapxunr  于 2021-05-31  发布在  Hadoop
关注(0)|答案(1)|浏览(463)

我试图通过id将Dataframe保存到csv分区中,为此我使用spark1.6和scala。函数partitionby(“id”)没有给出正确的结果。
我的代码在这里:

validDf.write
       .partitionBy("id")
       .format("com.databricks.spark.csv")
       .option("header", "true")
       .option("delimiter", ";")
       .mode("overwrite")       
       .save("path_hdfs_csv")

My Dataframe looks like  :
-----------------------------------------
| ID        |  NAME       |  STATUS     |
-----------------------------------------
|     1     |     N1      |     S1      |
|     2     |     N2      |     S2      |
|     3     |     N3      |     S1      |
|     4     |     N4      |     S3      |
|     5     |     N5      |     S2      |
-----------------------------------------

此代码不基于列id创建3个csv默认分区(第0部分、第1部分、第2部分)。
我期望的是:为每个id获取子目录或分区。有什么帮助吗?

ffscu2ro

ffscu2ro1#

spark1.6(或低于2的所有spark版本)中的spark csv不支持分区。
您的代码适用于spark>2.0.0。
对于spark版本,您需要首先准备csv并将其保存为文本(分区适用于 spark-text ):

import org.apache.spark.sql.functions.{col,concat_ws}
val key = col("ID")
val concat_col = concat_ws(",",df.columns.map(c=>col(c)):_*) // concat cols to one col
val final_df = df.select(col("ID"),concat_col) // dataframe with 2 columns: id and string 
final_df.write.partitionBy("ID").text("path_hdfs_csv") //save to hdfs

相关问题