我是Spark的新手(尽管我具有Hadoop和MapReduce的经验),并且正在尝试处理每行带有JSON记录的巨型文件。我想对每一行进行一些转换,并每n条记录(例如1百万个)写入一个输出文件。因此,如果输入文件中有750万条记录,则应生成8个输出文件。
我怎样才能做到这一点?您可以使用Java或Scala提供答案。
使用Spark v2.1.0。
最佳答案
您可以使用类似:
val dataCount = data.count
val numPartitions = math.ceil(dataCount.toDouble/100000).toInt
val newData = data.coalesce(numPartitions)
newData.saveAsTextFile("output path")
我目前在Windows游戏机上。因此,此代码未经测试,可能包含一些小错误。但总的来说应该可行。
引用:Spark: Cut down no. of output files
附带说明一下,虽然控制分区的大小不是一个坏主意,但任意决定要在分区中存储100万条记录可能不是解决之道。通常,您会弄乱分区大小以优化群集利用率。
编辑:我应该注意,这不能保证您每个分区都有一百万条记录,只是您应该在那个球场上有东西。