配置spark作业将3000000文件写入输出

时间:2019-04-05 07:18:59

标签: scala apache-spark

我必须生成3000000个文件作为spark作业的输出。

我有两个输入文件:

File 1 -> Size=3.3 Compressed, No.Of Records=13979835
File 2 -> Size=1.g Compressed, No.Of Records=6170229

Spark Job正在执行以下操作:

  1. 读取这两个文件,并根据共同的column1加入它们。 -> DataFrame-A
  2. 基于一列的DataFrame-A分组结果2-> DataFrame-B
  3. 在DataFrame-B中,将array_join用于聚合列,并用'\ n'字符分隔该列。 -> DataFrame-C
  4. 按列2写入DataFrame-C分区的结果。

    val DF1 = sparkSession.read.json("FILE1") //    |ID     |isHighway|isRamp|pvId      |linkIdx|ffs |length            |
    val DF12 = sparkSession.read.json("FILE2") //    |lId    |pid       |
    
    val joinExpression = DF1.col("pvId") === DF2.col("lId")
    val DFA = DF.join(tpLinkDF, joinExpression, "inner").select(col("ID").as("SCAR"), col("lId"), col("length"), col("ffs"), col("ar"), col("pid")).orderBy("linkIdx")
    val DFB = DFA.select(col("SCAR"),concat_ws(",", col("lId"), col("length"),col("ffs"), col("ar"), col("pid")).as("links")).groupBy("SCAR").agg(collect_list("links").as("links"))
    
    val DFC = DFB.select(col("SCAR"), array_join(col("links"), "\n").as("links"))
    DFC.write.format("com.databricks.spark.csv").option("quote", "\u0000").partitionBy("SCAR").mode(SaveMode.Append).format("csv").save("/tmp")
    

我必须生成3000000个文件作为spark作业的输出。

1 个答案:

答案 0 :(得分:1)

运行一些测试后,我有了一个想法,可以像这样批量运行该工作:

  • 查询startIdx:0,endIndex:100000
  • 查询startIdx:100000,endIndex:200000
  • 查询startIdx:200000,endIndex:300000

等等...直到

  • 查询startIdx:2900000,endIndex:3000000