Scala 将数据帧的顺序保存到HDFS 输入数据:
代码 使用列Scala 将数据帧的顺序保存到HDFS 输入数据:,scala,dataframe,apache-spark-sql,spark-dataframe,rdd,Scala,Dataframe,Apache Spark Sql,Spark Dataframe,Rdd,代码 使用列键、数据、值将数据读入DF后 datadf.coalesce(1).orderBy(desc("key")).drop(col("key")).write.mode("overwrite").partitionBy("date").text("hdfs://path/") 我试图按列键对列进行排序,并在保存到hdfs之前删除相同的列(每天保存到一个文件中)。 我无法保留输出文件中的顺序。 如果我没有使用coalesce,则顺序会保留,但会生成多个文件 输出: /20180701/p
键、数据、值将数据读入DF后
datadf.coalesce(1).orderBy(desc("key")).drop(col("key")).write.mode("overwrite").partitionBy("date").text("hdfs://path/")
我试图按列键对列进行排序,并在保存到hdfs之前删除相同的列(每天保存到一个文件中)。
我无法保留输出文件中的顺序。
如果我没有使用coalesce,则顺序会保留,但会生成多个文件
输出:
/20180701/part-xxxxxxx.txt
a1
a9
a6
a4
a5
a3
a7
a8
a2
a10
/20180702/part-xxxxxxx.txt
a18
a12
a13
a19
a15
a16
a17
a11
a14
/20180701/part-xxxxxxx.txt
a1
a2
a3
a4
a5
a6
a7
a8
a9
a10
/20180702/part-xxxxxxx.txt
a11
a12
a13
a14
a15
a16
a17
a18
a19
预期OP:
/20180701/part-xxxxxxx.txt
a1
a9
a6
a4
a5
a3
a7
a8
a2
a10
/20180702/part-xxxxxxx.txt
a18
a12
a13
a19
a15
a16
a17
a11
a14
/20180701/part-xxxxxxx.txt
a1
a2
a3
a4
a5
a6
a7
a8
a9
a10
/20180702/part-xxxxxxx.txt
a11
a12
a13
a14
a15
a16
a17
a18
a19
下面的代码应该让您开始(这是使用Spark 2.1):-
“键”字段的类型是什么?键字段的类型是字符串
import org.apache.spark.sql.types.StructType
val schema = new StructType().add($"key".int).add($"date".string).add($"value".string)
val df = spark.read.schema(schema).option("header","true").csv("source.txt")
df.coalesce(1).orderBy("key").drop("key").write.mode("overwrite").partitionBy("date").csv("hdfs://path/")