Ищите советы по производительности файлов Spark DStream to Parquet - PullRequest
0 голосов
/ 01 апреля 2019

Я хочу сохранить индексы Elasticsearch в файлах HDFS, не используя ES-Hadoop Connector.Предлагаемое решение заключается в использовании потоковых пользовательских приемников для чтения и сохранения в виде файлов паркета, а код выглядит так:

JavaDStream<String> jsonDocs = ssc.union(dsList.get(0), dsList.subList(1, dsList.size())); // I have a couple receivers
jsonDocs.foreachRDD( rdd -> {
    Dataset<Row> ds = spark.read().json(spark.createDataset(rdd.rdd(), Encoders.STRING()));
    ds.write().mode(SaveMode.Append).option("compression","gzip").parquet(path); 

С этим я получаю неплохой показатель производительности, однако, поскольку я новичок в Spark, яИнтересно, есть ли место для улучшения.Например, я вижу, что задания json () и parquet () занимают большую часть времени, и требуются ли задания json () длительное время или их можно избежать?(Я упустил некоторые другие задания, например count (), из фрагмента кода для простоты.)

Использование структурированной потоковой передачи выглядит хорошо, но я не нашел простого решения с потоковой передачей пользовательских приемников.Заранее спасибо,

1 Ответ

0 голосов
/ 02 апреля 2019
spark.read().json(spark.createDataset(rdd.rdd(), Encoders.STRING()));

Как видно выше, чтение json () может быть не лучшим для работы, чувствительной к производительности.Spark использует JacksonParser в своем API источника данных для чтения json.Если ваша структура json проста, попробуйте разобрать ее самостоятельно, используя функцию map () для создания строки.

...