[英]Spark & Scala - NullPointerException in RDD traversal
我有許多CSV文件,需要通過其文件名的一部分將它們組合成RDD。
例如,對於以下文件
$ ls
20140101_1.csv 20140101_3.csv 20140201_2.csv 20140301_1.csv
20140301_3.csv 20140101_2.csv 20140201_1.csv 20140201_3.csv
我需要將名稱為20140101*.csv
文件合並到RDD中以對其進行處理,依此類推。
我正在使用sc.wholeTextFiles
讀取整個目錄,然后按文件sc.wholeTextFiles
文件名分組以形成文件名字符串。 然后,我將字符串傳遞給sc.textFile以單個RDD形式打開文件。
這是我的代碼-
val files = sc.wholeTextFiles("*.csv")
val indexed_files = files.map(a => (a._1.split("_")(0),a._1))
val data = indexed_files.groupByKey
data.map { a =>
var name = a._2.mkString(",")
(a._1, name)
}
data.foreach { a =>
var file = sc.textFile(a._2)
println(file.count)
}
當我嘗試調用textFile
時,我得到了SparkException - NullPointerException
。 錯誤堆棧引用RDD中的Iterator。 我無法理解該錯誤-
15/07/21 15:37:37 INFO TaskSchedulerImpl: Removed TaskSet 65.0, whose tasks have all completed, from pool
org.apache.spark.SparkException: Job aborted due to stage failure: Task 1 in stage 65.0 failed 4 times, most recent failure: Lost task 1.3 in stage 65.0 (TID 115, 10.132.8.10): java.lang.NullPointerException
at $iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$anonfun$1.apply(<console>:33)
at $iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$anonfun$1.apply(<console>:32)
at scala.collection.Iterator$class.foreach(Iterator.scala:727)
at scala.collection.AbstractIterator.foreach(Iterator.scala:1157)
at org.apache.spark.rdd.RDD$$anonfun$foreach$1$$anonfun$apply$28.apply(RDD.scala:870)
at org.apache.spark.rdd.RDD$$anonfun$foreach$1$$anonfun$apply$28.apply(RDD.scala:870)
at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1765)
at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1765)
但是,當我在spark外殼中執行sc.textFile(data.first._2).count
時,我能夠形成RDD並能夠檢索計數。
任何幫助是極大的贊賞。
將評論轉換為答案:
var file = sc.textFile(a._2)
在另一個RDD的foreach
中無法正常工作。 您不能像這樣嵌套RDD。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.