hadoop—将大约2k列的sparkDataframe保存到hive非常慢

atmip9wb  于 2021-05-29  发布在  Hadoop
关注(0)|答案(0)|浏览(289)

嗨,我这里有代码:

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和“createtableasselect…”语句以正常速度工作。它只是sparkDataframe和hive之间的桥梁。
关于这个问题可能是什么以及如何解决的任何暗示?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题