Вызов отличного и карта вместе бросает NPE в искровой библиотеке

Я не уверен, если это ошибка, так что если вы делаете что-то вроде этого

// d:spark.RDD[String]
d.distinct().map(x => d.filter(_.equals(x)))

Вы получите Java NPE. Однако если вы делаете collect незамедлительно после distinct, все будет хорошо.

Я использую спарк 0.6.1.

2 ответа

Решение

Spark не поддерживает вложенные RDD или пользовательские функции, которые ссылаются на другие RDD, следовательно, NullPointerException; увидеть эту тему на spark-users список рассылки.

Похоже, ваш текущий код пытается сгруппировать элементы d по стоимости; Вы можете сделать это эффективно с groupBy() Метод RDD:

scala> val d = sc.parallelize(Seq("Hello", "World", "Hello"))
d: spark.RDD[java.lang.String] = spark.ParallelCollection@55c0c66a

scala> d.groupBy(x => x).collect()
res6: Array[(java.lang.String, Seq[java.lang.String])] = Array((World,ArrayBuffer(World)), (Hello,ArrayBuffer(Hello, Hello)))

Как насчет примера окон, приведенного в руководстве по программированию потоков Spark 1.3.0

val dataset: RDD[String, String] = ...
val windowedStream = stream.window(Seconds(20))...
val joinedStream = windowedStream.transform { rdd => rdd.join(dataset) }

SPARK-5063 приводит к сбою в примере, так как соединение вызывается из метода преобразования в RDD

Другие вопросы по тегам