火花优化技术

时间:2020-04-01 10:34:36

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

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

    spark-submit \
    --class class-name\
    --jar file

或者我可以在spark提交中添加任何额外的参数以改善优化效果。

标量代码(样本):

    All Imports
    object sample_1 {
    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")

    }
    }

1 个答案:

答案 0 :(得分:0)

首先,您不需要将数据存储在temp表中,以后再写入hive表。您可以直接使用DataFrameWriter API读取文件并写入输出。这将使您的代码减少一步。

您可以编写如下:

val spark = SparkSession.builder.enableHiveSupport().getOrCreate()

val df = spark.read.csv(filePath) //Add header or delimiter options if needed

inputDF.write.mode("append").format(outputFormat).saveAsTable(outputDB + "." + outputTableName)

这里,outputFormat将是orcoutputDB将是您的配置单元数据库,outputTableName将是您的配置单元表名称。

我认为,使用上述技术,您的写入时间将大大减少。另外,请提及您的工作正在使用的资源,我也许可以进一步对其进行优化。

您可以使用的另一种优化方法是在写入时对数据帧进行分区。这将使写入操作更快。但是,您需要仔细确定要进行分区的列,以免最终创建过多的分区。