1. 程式人生 > >java使用spark時型別轉換

java使用spark時型別轉換

mysparkTest2 my = new mysparkTest2();
SparkSession spark = SparkSession.
        builder().
        master( "local" ).
        appName( "mytest" ).getOrCreate();

Dataset<String> logData = spark.read().textFile("./test").cache();
List<Integer> kk= logData.javaRDD().map(a -> my.strtoInt( a ) ).collect();
System.out.println( kk );

spark.close();

問題1:上述程式碼map裡假如直接使用a->Integer.getInteger(a) 的話,結果會出現全為null。

必須經過scala程式碼的轉化包裝才能使用

程式碼如下

class mysparkTest2 extends Serializable {
  def strtoInt(str:String): Int ={
    return str.toInt
  }

}

問題2:scala閉包的話,外部類的呼叫必須是可序列化的,不然會報錯。所以要記得加上extends Serializable