Объединение на фрейме данных вызывает много перетасовки данных между исполнителями. В вашем случае вы можете обойтись без объединения. Используйте спецификацию окна для разделения данных на «lable» и «year» и агрегирования в окне.
from pyspark.sql.window import *
windowSpec = Window.partitionBy('lable','year')\
.rowsBetween(Window.unboundedPreceding, Window.unboundedFollowing)
df = df.withColumn("std", f.round(f.stddev("val").over(windowSpec), 2))
А-ч, да, я понимаю проблему теперь:
x86-64 процессоры неявно обнуляют - расширяют 32-разрядные регистры до 64-разрядного при выполнении 32-разрядных операций (на %eax, %ebx, и т.д.). Это должно поддержать совместимость с унаследованным кодом, который ожидает 32-разрядную семантику для этих регистров, насколько я понимаю.
Таким образом, я боюсь, что нет никакого способа сделать ror
на просто более низких 32 битах 64-разрядного регистра. Необходимо будет сделать, используют ряд нескольких инструкций...
Проверьте вывод блока, сгенерированный gcc! Используйте gcc -s
отметьте, чтобы скомпилировать код и генерировать вывод asm.
IIRC, x86-64 использует 32-разрядные целые числа по умолчанию если не, явно предписал делать иначе, таким образом, это может быть (часть) проблемой.