Нет разделения хэша при использовании повторного разделения в Spark

Искра doc говорит, что .repartition() возвращает новый DataFrame, который по умолчанию равен Hash-Partitioned. Но в примере, который я использую, как показано ниже, это не так.

rdd=sc.parallelize([('a',22),('b',1),('c',4),('b',1),('d',2),
                    ('a',0),('d',3),('a',1),('c',4),('b',7),
                    ('a',2),('a',22),('b',1),('c',4),('b',1),
                    ('d',2),('a',0),('d',3),('a',1),('c',4),
                    ('b',7),('a',2)] 
                   )
df=rdd.toDF(['key','value'])
df=df.repartition(5,'key')    #5 partitions on 'key' column
print("Partitioner: {}".format(df.rdd.partitioner)) # prints - 'Partitioner: None'  Why??

Почему у меня нет разделителя? Позвольте мне распечатать разделы с помощью функции glom() -

print("Partitions structure: {}".format(df.rdd.glom().collect()))
[
 [ #Partition 1
   Row(key='a', value=22), Row(key='a', value=0), Row(key='a', value=1), 
   Row(key='a', value=2), Row(key='a', value=22), Row(key='a', value=0), 
   Row(key='a', value=1), Row(key='a', value=2)
 ], 

 [ #Partition 2
   Row(key='b', value=1), Row(key='b', value=1), Row(key='b', value=7), 
   Row(key='b', value=1), Row(key='b', value=1), Row(key='b', value=7)
 ], 

 [ #Partition 3
   Row(key='c', value=4), Row(key='c', value=4), Row(key='c', value=4),
   Row(key='c', value=4)
 ],

 [ #Partition 4 (empty)
 ],

 [ #Partition 5
  Row(key='d', value=2), Row(key='d', value=3), Row(key='d', value=2),
  Row(key='d', value=3)
 ]
]

Мы ясно видим, что данные хорошо разделены по key, причем все Rows() с одним и тем же столбцом key заканчиваются на одном разделе. Итак, почему partitioner печатает None? Что я могу сделать, чтобы получить partitioner, который в дальнейшем можно будет использовать для оптимизации?


person cph_sto    schedule 21.11.2018    source источник
comment
RDD не DataFrame и DataFrame секционирование (df._jdf.queryExecution().toRdd().partitioner()) не может использоваться для логической оптимизации выполнения на RDD, так же, как RDD секционирование не влияет на логическую оптимизацию плана SQL, когда RDD преобразуется в DataFrame. Для DataFrame операций ваше хорошее, как есть.   -  person zero323    schedule 21.11.2018
comment
Спасибо за ответ и за ссылку на соответствующую ссылку. С уважением,   -  person cph_sto    schedule 21.11.2018