Запросить внешний фрейм данных в карте Spark Streaming или foreachRDD [дубликат]

Наивный код будет таким же, независимо от количества бит. Если вам не нужна сверхскоростная версия с двойным сверлом, это будет делать

uint32_t x;
uint32_t y;
uint64_t z = 0;

for (int i = 0; i < sizeof(x) * 8; i++)
{
  z |= (x & (uint64_t)1 << i) << i | (y & (uint64_t)1 << i) << (i + 1);
}

. Если вам нужно ускорить бит, то это должно работать. Заметим, что x и y должны быть 64-битными переменными.

uint64_t x;
uint64_t y;
uint64_t z = 0;

x = (x | (x << 16)) & 0x0000FFFF0000FFFF;
x = (x | (x << 8)) & 0x00FF00FF00FF00FF;
x = (x | (x << 4)) & 0x0F0F0F0F0F0F0F0F;
x = (x | (x << 2)) & 0x3333333333333333;
x = (x | (x << 1)) & 0x5555555555555555;

y = (y | (y << 16)) & 0x0000FFFF0000FFFF;
y = (y | (y << 8)) & 0x00FF00FF00FF00FF;
y = (y | (y << 4)) & 0x0F0F0F0F0F0F0F0F;
y = (y | (y << 2)) & 0x3333333333333333;
y = (y | (y << 1)) & 0x5555555555555555;

z = x | (y << 1);
2
задан Paul 17 September 2015 в 00:54
поделиться

1 ответ

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

Эта проблема возникает, когда selectReviews вызывается в лямбда-функции карты, которая происходит на рабочем узле, поскольку selectReviews требует выполнения .select() для поддержки RDD reviewsDF.

Обходной путь заключается в замене sc.parallelize на простой цикл for или аналогичный, над categories, выполняемый локально. Ускорение от искры по-прежнему будет задействовано в фильтрации кадров данных, которая возникает при каждом вызове selectReviews.

4
ответ дан Paul 25 August 2018 в 14:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: