2016-01-06 39 views
0

我想使用md5函数RDD [(String,Array [Double])]],但是有空指针异常的错误 。我发现堆栈溢出的问题。 call of distinct and map together throws NPE in spark library如果我可以使用用户定义的函数来RDD

我的代码:

def md5(s: String) = { 
    MessageDigest.getInstance("MD5").digest(s.getBytes). 
      map("%02x".format(_)).mkString.substring(0,8) 
    } 

val rdd=sc.makeRDD(Array(1,8,6,4,9,3,76,4))//.collect().foreach(println) 
val rdd2 = rdd.map(r=>(r+"s",Array(1.0,2.0))) 

rdd2.map{ 
    case(a,b) => (md5(a)+"_"+a,b) 
}.foreach(println) 
在本地模式

,这是确定的,但在集群模式下,它的错误。

java.lang.NullPointerException 

我可以用其他方法做到这一点吗? THX :)

错误:

Exception in thread "main" java.lang.NullPointerException      
    at no1.no1$.no1$no1$$md5$1(no1.scala:139) 
    at no1.no1$$anonfun$8.apply(no1.scala:143) 
    at no1.no1$$anonfun$8.apply(no1.scala:141) 
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244) 
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244) 
    at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33) 
    at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:108) 
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:244) 
    at scala.collection.mutable.ArrayOps$ofRef.map(ArrayOps.scala:108) 
    at no1.no1$.main(no1.scala:141) 
    at no1.no1.main(no1.scala) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:665) 
    at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:170) 
    at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:193) 
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:112) 
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) 

上面的代码是一个例子,但是这个代码似乎是正确的。我很困惑。

+1

您链接的问题与此处不相关。你能提供__full__回溯?没有上下文的'NullPointerException'不是很有意义。此外,这段代码似乎在本地模式和集群上都可以正常工作。 – zero323

+0

原因可能是我的hbase的配置SCAN_COLUMNS有一些问题... – WicleQian

回答

0

我看不出有什么办法让RDD提供null串到你的MD5函数,失败显然是它里面:

java.lang.NullPointerException
at no1.no1$.no1$no1$$md5$1(no1.scala:139) <-- here!

我的钱将是静态调用MessageDigest.getInstance("MD5")是在返回null遗嘱执行人。那或者拨打.digest。检查可能发生的情况,也许你在本地尝试的输入不包含失败情况。

相关问题