Проблема с записью распределенных частично-файлов с помощью spark scala с сборкой sbt fat-jar - PullRequest
0 голосов
/ 14 февраля 2019

Я выполняю некоторый искровой код на 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 файлов деталей, но я получаю только один файл детали.

...