Java 在Spark中的RDD上执行分组,并将每组作为单独的拼花文件写入
我的内存中有一个RDD。我想使用一些任意函数对RDD进行分组,然后将每个分组作为一个单独的拼花文件写出 例如,如果我的RDD由以下形式的JSON字符串组成:Java 在Spark中的RDD上执行分组,并将每组作为单独的拼花文件写入,java,apache-spark,apache-spark-sql,parquet,Java,Apache Spark,Apache Spark Sql,Parquet,我的内存中有一个RDD。我想使用一些任意函数对RDD进行分组,然后将每个分组作为一个单独的拼花文件写出 例如,如果我的RDD由以下形式的JSON字符串组成: {"type":"finish","resolution":"success","csr_id": 214} {"type":"create","resolution":"failure","csr_id": 321} {"type":"action","resolution":"success","csr_id": 262} 我想按“t
{"type":"finish","resolution":"success","csr_id": 214}
{"type":"create","resolution":"failure","csr_id": 321}
{"type":"action","resolution":"success","csr_id": 262}
我想按“type”属性对JSON字符串进行分组,并将每组具有相同“type”的字符串写入同一拼花文件
我可以看到DataFrame API支持如下写出拼花地板文件(例如,如果RDD由JSON字符串组成):
但是GroupedData API似乎没有提供将每个组写入单个文件的任何函数
有什么想法吗?您不能写入
GroupedData
,但可以在写入时对数据进行分区:
dataFrame.write.partitionBy("type").format("parquet").save("/tmp/foo")
每个类型都将以${column}=${value}
格式写入自己的目录。这些可以单独加载:
sqlContext.read.parquet("/tmp/foo/type=action").show
// +------+----------+
// |csr_id|resolution|
// +------+----------+
// | 262| success|
// +------+----------+
dataFrame.write.partitionBy("type").format("parquet").save("/tmp/foo")
sqlContext.read.parquet("/tmp/foo/type=action").show
// +------+----------+
// |csr_id|resolution|
// +------+----------+
// | 262| success|
// +------+----------+