嗨,我有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")
}
}
答案 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
将是orc
,outputDB
将是您的配置单元数据库,outputTableName
将是您的配置单元表名称。
我认为,使用上述技术,您的写入时间将大大减少。另外,请提及您的工作正在使用的资源,我也许可以进一步对其进行优化。
您可以使用的另一种优化方法是在写入时对数据帧进行分区。这将使写入操作更快。但是,您需要仔细确定要进行分区的列,以免最终创建过多的分区。