繁体   English   中英

Spark sql 优化技巧 将csv加载到hive的orc格式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM