#apache-spark
Вопрос:
Я работал над случаем, когда фрейм данных соединяется с несколькими фреймами данных отдельно, на разных кольцах, что слишком часто. Мне было интересно, как оптимизировать соединение, чтобы сделать их быстрее. Мы можем считать, что набор данных имеет большой размер, поэтому широковещательные объединения не являются вариантом.
Например:
> schema_df1 = new StructType() .add(StructField("key1", StringType,
> true)) .add(StructField("key2", StringType, true))
> .add(StructField("val", DoubleType, true))
>
>
> schema_df2 = new StructType() .add(StructField("key1", StringType,
> true)) .add(StructField("val", DoubleType, true))
>
>
> schema_df3 = new StructType() .add(StructField("key2", StringType,
> true)) .add(StructField("val", DoubleType, true))
>
> Now if we want to join
> join1 = df1.join(df2,"key1")
> join2 = df1.join(df3,"key2")
Я думал о пристегивании как о решении для ускорения соединений. Но если я ведро df1 на key1,то join2 может не принести пользы, и наоборот (если ведро на key2 для df1).
или мы должны использовать df1 дважды, один с ключом 1, а другой с ключом 2? Существует ли стратегия, позволяющая ускорить оба соединения для обоих соединений?
Комментарии:
1. Оптимизация соединения звезд была добавлена в Spark 2.2, см. issues.apache.org/jira/browse/SPARK-17626 . Вы ищете дальнейших улучшений?
2. @mazaneicha Спасибо за ваш ответ. Я не знал об оптимизации соединения звезд в spark. Буду читать об этом подробнее. Если у вас есть какой-либо другой ресурс, пожалуйста, вставьте его сюда.