经典套路是啥
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
未完待续