Hadoop 将大约2k列的Spark数据帧保存到配置单元非常慢

Hadoop 将大约2k列的Spark数据帧保存到配置单元非常慢,hadoop,apache-spark,hive,Hadoop,Apache Spark,Hive,嗨,我这里有这个代码: val conf = new SparkConf().setAppName(jobName) conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer") val sc = new SparkContext(conf) val hiveContext = new HiveContext(sc) val df = hiveContext.read .format("com.

嗨,我这里有这个代码:

val conf = new SparkConf().setAppName(jobName)
conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
val sc = new SparkContext(conf)
val hiveContext = new HiveContext(sc)

val df = hiveContext.read
      .format("com.databricks.spark.avro")
      .load(inputDir)

df.registerTempTable("df")

hiveContext.sql("SET hive.exec.compress.output=true")
hiveContext.sql("SET parquet.compression=SNAPPY")

// this is fast
df.take(1)

// this is way too slow
hiveContext.sql("CREATE TABLE myTable AS SELECT * FROM df")
它从压缩的avro文件中读取数据,并将其存储在配置单元表中。加载速度很快,像count()或take()这样的操作按预期工作。但是,插入到配置单元表中的速度非常慢

我已经检查了sparkUI,它显示所有执行器都在工作,但LTM输入读取速度不够快,大约为1MB/s

这个问题似乎与列的数量有关,有200列,一切都运行得很快

在我将配置单元表加载到包含所有2k列的表中之后,配置单元SELECT和“CREATE table AS SELECT…”语句以正常速度工作。它只是spark数据帧和Hive之间的桥梁


有关于问题可能是什么以及如何解决问题的任何提示吗?

您有多少行数据?我已经尝试了2500万和500万行为什么不只是df.saveAsTable?(idk这可能会对列问题产生什么影响,但它可能会起作用)我也尝试过。无论如何,不推荐使用saveAsTable。