[英]Spark sql Optimization Techniques loading csv to orc format of hive
嗨,我在 CSV 文件中有 90 GB 数据,我正在将此数据加载到一个临时表中,然后使用 select insert 命令从临时表到 orc 表,但是为了将数据转换和加载为 orc 格式,在 spark sql 中需要 4 小时。我可以使用任何类型的优化技术来减少这个时间。截至目前我没有使用任何类型的优化技术,我只是使用 spark sql 并将数据从 csv 文件加载到 table(textformat) 然后从这个 temp表到兽人表(使用选择插入)使用火花提交为:
spark-submit \
--class class-name\
--jar file
或者我可以在 spark submit 中添加任何额外的参数以改进优化。
Scala代码(示例):
All Imports
object demo {
def main(args: Array[String]) {
//sparksession with enabled hivesuppport
var a1=sparksession.sql("load data inpath 'filepath' overwrite into table table_name")
var b1=sparksession.sql("insert into tablename (all_column) select 'ALL_COLUMNS' from source_table")
}
}
我只是使用 spark sql 并将数据从 csv 文件加载到表(文本格式),然后从这个临时表加载到 orc 表(使用选择插入)
这里不需要两步过程..
val DFCsv = spark.read.format("csv")
.option("sep", ",")
.option("inferSchema", "true")
.option("header", "true")
.load("yourcsv")
repartition
(这可能是由于您尚未完成而导致实际延迟 4 小时的原因),因为它的文件很大,然后... dfcsv.repartition(90)
意味着它将/可能将 csv 数据重新dfcsv.repartition(90)
为 90 个几乎相等的部分。 其中 90 是样本数。 你可以提到任何你想要的。
DFCsv.write.format("orc")
.partitionBy('yourpartitioncolumns')
.saveAsTable('yourtable')
或者
DFCsv.write.format("orc")
.partitionBy('yourpartitioncolumns')
.insertInto('yourtable')
注意:1)对于大数据,您需要进行重新分区以均匀分布数据会增加并行度,从而提高性能。
2) 如果你没有分区列并且是非分区表,那么在上面的示例中不需要
partitionBy
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.