Когда делать .repartition (Int AnyValue) в Spark, сразу после чтения паркета (или) после выполнения вычислений на этом паркете? - PullRequest
1 голос
/ 05 июня 2019

У меня есть файл паркета, который разбит на части по столбцу даты, что может быть оптимизированным способом сделать .reparition ()?Должен ли я сделать это сразу после прочтения паркета, как показано ниже:

 val myPq = "/hive/data/myPq.db/myPq"
    sparkSession.read
      .format("parquet")
      .load(inputConfig.getString("myPq")).repartition(200).createOrReplaceTempView("myPqView")

или после выполнения широкого диапазона преобразований, таких как фильтр, карта и т. Д.

def readMyPq(){
val myPq = "/hive/data/myPq.db/myPq"
    sparkSession.read
      .format("parquet")
   .load(inputConfig.getString("myPq")).repartition(200).createOrReplaceTempView("myPqView")

val returnDF = spark.sql("Multiple Transformations from createOrReplaceTempView")
}

Что может бытьхороший способ?Заранее спасибо

Ответы [ 2 ]

3 голосов
/ 05 июня 2019

Это полностью зависит от того, когда вы считаете, что ваши данные будут наиболее несбалансированными. Если данные считываются несбалансированным образом (например, 1 большой раздел, 199 маленьких), вы можете сразу же перераспределить.

Если данные сбалансированы, когда вы их читаете, но после вашего фильтра / карты / и т. Д. Есть большой раздел и несколько маленьких, на этом этапе вы можете захотеть перераспределить.

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

2 голосов
/ 05 июня 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...