spark java
数据结构
SparkSession
SparkConf
SparkContext
JavaSparkContext
JavaStreamingContext
JavaRDD<Tuple2<Object, Object>>
JavaPairRDD<Tuple2<Integer, Integer>, Double>,有collectAsMap()方法
JavaRDD<Tuple2<Double, Double>>
数据结构转换
读取字符串
JavaRDD
将字符串进行拆分,map()方法返回JavaRDD数据结构
JavaRDD<String[]> splitedItem = stringItem.map(s -> {
// | 为正则表达式中特殊字符,表示或操作,则需要转义
String[] sarray = s.split("|");
return sarray;
});
将拆分结果转成key/value,mapToPair()方法返回JavaPairRDD数据结构
Tuple2<>可以自动推断数据类型
JavaPairRDD<Float, String> movieRDD = splitedItem.mapToPair(line ->
new Tuple2<>(Float.parseFloat(line[0]), line[1]));
数据转换异常:
step 1:
JavaRDD<Tuple2<Float, String>> movieRDD = splitedItem.mapToPair(line ->
new Tuple2<>(Float.parseFloat(line[0]), line[1]));
step 2: 将JavaRDD通过JavaPairRDD.fromJavaRDD()方法转成JavaPairRDD,然后调用collectAsMap(),则抛出类型转换异常。
ML Pipeline
用户自定义函数
// 通过用户自定义函数解决数据异常值问题
sparkSession.udf().register("changeDataType", s -> s.equals("?") ? "0" : s, DataTypes.StringType);
// register函数原型如下
public void register(String name, UDF1 f, DataType returnType) {}