为什么输出写入数据的方式多于apache spark中的输入数据

时间:2017-10-31 15:28:50

标签: apache-spark

我正在从HDFS向cassandra插入310GB的csv文件数据,我有3个节点的spark集群,每个节点有32GB RAM和24个核心。输出数据大小超过输入数据,可能是什么原因?是因为火花对同一块数据运行多个任务并将其写回casandra?如果是,如何检查计算,是否可以从spark web ui?对于310GB的数据,可能会写出多少额外的数据? spark job status

val spark = SparkSession
.builder()
.appName(job.name)
.config("spark.cassandra.connection.host", cassandraHost)
.config("spark.cassandra.connection.port", cassandraPort)
.getOrCreate()
val csv: DataFrame = spark.read
.format(fileFormat)
.option("header", job.header)
.option("inferSchema", job.inferSchema)
.option("delimiter", job.delimiter)
.load(sourceFile)
.filter(job.filter.getOrElse("1==1"))
.distinct()
.na
.fill("unknown")
val columns: Array[Column] = csv.columns
.map(c =>
  job.schema.get(c) match {
    case Some(newName) => csv.col(c).as(newName.toLowerCase)
    case None => null
  })
.filter(c => c != null)

val dataToStoreInit = csv.select(columns: _*)
val partitionColumn = job.partitionKeyColumns.get(0)
val dataToStore =   dataToStoreInit.repartition(dataToStoreInit(partitionColumn))

dataToStore.write
.format("org.apache.spark.sql.cassandra")
.options(Map("table" -> job.outTableName, "keyspace" -> keyspace))
.mode(SaveMode.Append)
.save()

spark.stop()

0 个答案:

没有答案