【问题标题】:Spark sql Optimization Techniques loading csv to orc format of hiveSpark sql优化技术将csv加载到hive的orc格式
【发布时间】:2020-07-13 23:37:05
【问题描述】:

嗨,我在 CSV 文件中有 90 GB 数据,我将此数据加载到一个临时表中,然后使用 select insert 命令从临时表到 orc 表,但是为了将数据转换和加载为 orc 格式,在 spark sql 中需要 4 小时.有什么优化技术可以用来减少这个时间吗?到目前为止,我没有使用任何优化技术,我只是使用 spark sql 并将数据从 csv 文件加载到表(文本格式)然后从这个临时表到兽人表(使用选择插入) 使用 spark 提交:

    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")

    }
    }

【问题讨论】:

    标签: scala apache-spark pyspark apache-spark-sql pyspark-sql


    【解决方案1】:

    我只是使用 spark sql 并将数据从 csv 文件加载到 表(文本格式),然后从这个临时表到兽人表(使用 选择插入)


    这里不需要两步过程..

    • 读取如下示例的数据帧...
    val DFCsv = spark.read.format("csv")
          .option("sep", ",")
          .option("inferSchema", "true")
          .option("header", "true")
          .load("yourcsv")
    
    
    • 如果需要,你必须做repartition(这可能是实际延迟 4 小时的原因,因为你还没有做)因为它的文件很大,然后...

    dfcsv.repartition(90) 表示它将/可能将 csv 数据重新分区为 90 个几乎相等的部分。其中 90 是样本数。你可以提及任何你想要的。

          DFCsv.write.format("orc")
        .partitionBy('yourpartitioncolumns')
        .saveAsTable('yourtable')
    

         DFCsv.write.format("orc")
         .partitionBy('yourpartitioncolumns')
         .insertInto('yourtable')
    

    注意:1)对于大数据,您需要重新分区以均匀分布数据会增加并行度,因此 表现。

    2) 如果您没有分区列并且是 非分区表则不需要上面的partitionBy 样品

    【讨论】:

    • 我应该如何重新分区。在我的 Orc 表中我有分区列,但是当我尝试使用以下方法保存我的 df 时:
    • DFCsv.write.format("orc").partitionBy('yourpartitioncolumns').saveAsTable('dbname.yourtable')
    • 它显示数据库未找到问题。如果我没有指定任何数据库名称,那么它在某个默认数据库中的保存表我检查了我所有的数据库它没有在任何地方显示这个表,但是当我再次运行时没有数据库名称的相同命令显示 default.tablename 已经存在。
    • DFCsv.write.format("orc").partitionBy('yourpartitioncolumns').saveAsTable('yourtable') 或者我可以通过任何类型的火花提交配置来提高这种性能?
    • 您必须按照 spark-submit 命令中的要求传递 executor 、 core 、 executor memory 、 driver memory 的数量。注册。另一个问题,“未找到数据库”意味着您必须提及现有数据库/创建并提及数据库。 ....我的解决方案无论如何都应该有效。
    猜你喜欢
    • 2017-09-15
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多