嗨,我这里有代码:
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之间的桥梁。
关于这个问题可能是什么以及如何解决的任何暗示?
暂无答案!
目前还没有任何答案,快来回答吧!