Spark的经典套路

经典套路是啥

 1. 得到DataFrame或Dataset
    Dataset<String> ds = …

 2. 注册成临时表
    ds.createOrReplaceTempView("xxx")

 3. SQL计算获取结果
    spark.sql ("SELECT …")

如何得到ds

 1. 程序入口:
 SparkSession spark=SparkSession.builder().appName("df-test").master("local").getOrCreate();
 -->spark中包含sparkContext和sqlContext两个对象
 2. 数据源:请参照下图,
 2.1.在这里,通过RDD转换成DataFrame作为示例说明
 2.1.1. 利用反射转换
 第一步:定义JavaBean,作为RDD的schema
 public class User implements Serializable{
    private String name;
    private int age;
    public User(String name,int age){
        this.name=name;
        this.age=age;
    }

    public int getAge() {
        return age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
 第二步:创建内容为一个对象的RDD
 JavaRDD<User> userRDD=spark.read().textFile("/path/xx.txt").javaRDD().map(
                new Function<String, User>() {
                    @Override
                    public User call(String line) throws Exception {
                        return new User(line.split(":")[0],Integer.parseInt(line.split(":")[1]));;
                    }
                }
        );
  第三步:通过createDataFrame将RDD转换为DataFrame
  Dataset<Row> userDF=spark.createDataFrame(userRDD,User.class);
 2.2.2.显式注入Schema
 第一步:定义RDD schema
String schemaString = "userID gender age occupation zipcode";
List<StructField> fields = new ArrayList<>();
for (String fieldName : schemaString.split(" ")) {
    StructField field = DataTypes.createStructField(fieldName, DataTypes.StringType, true);
    fields.add(field);
}
StructType schema = DataTypes.createStructType(fields);
第二步:生成Row的RDD
JavaRDD<String> peopleRDD = spark.sparkContext()
        .textFile("data/ml-1m/users.dat", 1)
        .toJavaRDD();
JavaRDD<Row> rowRDD = peopleRDD.map(new Function<String, Row>() {
    @Override
    public Row call(String record) throws Exception {
        String[] attributes = record.split("::");
        return RowFactory.create(attributes);
    }
});
第二步:通过spark.createDataFrame生成DF
Dataset<Row> userDataFrame = spark.createDataFrame(rowRDD, schema);

这里写图片描述

如何操作ds

以下以json数据源为例子进行说明,当然只要变成了df,其他的数据源的操作也是一样的。

SparkSession spark=SparkSession.builder().appName("df-test").master("local").getOrCreate();
Dataset<Row> df=spark.read().format("json").load("data/ml-1m/users.json");
未完待续

如何操作sql

未完待续
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值