Я выполняю некоторый искровой код на emr через fatjar, созданный с помощью sbt, и мой jar по любой причине не записывает распределенные файлы "part-xxxx" в S3, скорее он публикует один большой файл.Это вызывает проблемы с довольно большим набором данных, поскольку он пытается записать огромный файл в s3.Если я запускаю тот же код вне сборки sbt (т.е. вручную через spark-shell), файлы публикуются в распределенном режиме.Я новичок в sbt и теперь думаю, что это проблема с моим файлом build.sbt.Спасибо тебе за твое терпение.
Большую часть моего времени я потратил на попытки перераспределения при записи, но после запуска кода в другой среде, я думаю, что есть проблема с моими зависимостями и тем, как создается jar.
Строка, в которой возникают проблемы с моей программой:
out_df.coalesce(1024) \
.write.partitionBy(partition_column) \
.option("sep", "\t") \
.option("header", "true") \
.mode("overwrite") \
.csv(output)`
name := "PreProcessor"
version := "1.0"
scalaVersion := "2.11.8"
val sparkVersion = "2.3.0"
resolvers ++= Seq(
"apache-snapshots" at "http://repository.apache.org/snapshots/",
"Akka Repository" at "http://repo.akka.io/releases/",
"Typesafe Repo" at "http://repo.typesafe.com/typesafe/releases/"
)
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % sparkVersion,
"org.apache.spark" %% "spark-sql" % sparkVersion,
"org.apache.spark" %% "spark-mllib" % sparkVersion,
"org.apache.spark" %% "spark-streaming" % sparkVersion,
"org.apache.spark" %% "spark-hive" % sparkVersion,
"mysql" % "mysql-connector-java" % "5.1.6",
"com.typesafe" % "config" % "1.3.3"
)
assemblyMergeStrategy in assembly := {
case PathList("META-INF", xs @ _*) => MergeStrategy.discard
case x => MergeStrategy.first
}
Я ожидаю, что запись в s3 приведет к созданию 1024 файлов деталей, но я получаю только один файл детали.