Вызов отличного и карта вместе бросает 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