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