2015-06-07 3 views
1

Мой Спарк код читается как это: -Спарк NullPointerException

val logData = sc.textFile("hdfs://localhost:9000/home/akshat/recipes/recipes/simplyrecipes/*/*/*/*") 


def doSomething(line: String): (Long,Long) = { 


val numAs = logData.filter(line => line.contains("a")).count(); 


val numBs = logData.filter(line => line.contains("b")).count(); 
return (numAs,numBs) 

} 

val mapper = logData.map(doSomething _) 

val save = mapper.saveAsTextFile("hdfs://localhost:9000/home/akshat/output3") 

картографа имеет тип org.apache.spark.rdd.RDD[(Long, Long)] = MappedRDD При попытке выполнить действие saveAsTextFile, он дает ошибку java.lang.NullPointerException

Что я делаю неправильно, и какие изменения я должен сделать, чтобы исправить это исключение?
Спасибо заранее!

+0

Можете ли вы поставить полный трассировки стека Вот? – Sathish

ответ

5

Вы не должны указывать logData с точностью до doSomething. Это проблема. Я не могу точно сказать, что вы пытаетесь сделать, но если все, что вы пытаетесь сделать, это подсчет строк с «a» в них, вам не нужно делать def, просто выполните:

val numAs = logData.filter(line => line.contains("a")).count(); 
val numBs = logData.filter(line => line.contains("b")).count(); 

Если с другой стороны, вы пытаетесь считать «а» и «б» в каждой строке, и выписывать линию для каждого входа, то попробуйте следующее:

def doSomething(line: String): (Int,Int) = { 
    val numAs = line.count(ch => ch.equals("a")) 
    val numBs = line.count(ch => ch.equals("b")) 
    (numAs, numBs) 
} 
Смежные вопросы