Spark java 实践

spark java

数据结构

SparkSession
SparkConf
SparkContext
JavaSparkContext
JavaStreamingContext
JavaRDD<Tuple2<Object, Object>>
JavaPairRDD<Tuple2<Integer, Integer>, Double>,有collectAsMap()方法
JavaRDD<Tuple2<Double, Double>>

数据结构转换

读取字符串
JavaRDD stringItem = context.textFile(path);

将字符串进行拆分,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) {}

posted @ 2018-09-24 21:05  sunzhuli  阅读(198)  评论(0)    收藏  举报