Спарк Оптимизация Методы - PullRequest
0 голосов
/ 01 апреля 2020

Привет, у меня есть данные 90 ГБ. В файле CSV я загружаю эти данные в одну временную таблицу, а затем из временной таблицы в таблицу или c, используя команду select insert, но для преобразования и загрузки данных в формат или c. 4 часа искры sql. Есть ли какая-либо техника оптимизации, которую я могу использовать, чтобы сократить это время. На данный момент я не использую никакой техники оптимизации, я просто использую spark sql и загружаю данные из CSV-файла в таблицу (textformat), а затем из этой временной таблицы в таблицу или c (с использованием select insert) с использованием spark submit как:

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

или я могу добавить любой дополнительный параметр в spark submit для улучшение оптимизации.

scala код (образец):

    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 голосов
/ 02 апреля 2020

Прежде всего, вам не нужно хранить данные во временной таблице для последующей записи в таблицу кустов. Вы можете сразу прочитать файл и записать результат, используя API DataFrameWriter. Это уменьшит ваш код на один шаг.

Вы можете написать следующее:

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 будет вашим именем таблицы Hive.

Я думаю, что при использовании описанной выше техники ваше время записи значительно сократится. Также, пожалуйста, укажите ресурсы, которые использует ваша работа, и я смогу еще больше оптимизировать их.

Другая оптимизация, которую вы можете использовать, - это разделение вашего фрейма данных во время записи. Это ускорит операцию записи. Тем не менее, вам нужно тщательно определить столбцы, на которые нужно разбить раздел, чтобы не создавать много разделов.

...