创建SparkSession:Spark 中所有功能的入口是 SparkSession 类。要创建一个基本的 SparkSession 对象, 只需要使用 SparkSession.builder():

import org.apache.spark.sql.SparkSession;

SparkSession spark = SparkSession
  .builder()
  .appName("Java Spark SQL basic example")
  .config("spark.some.config.option", "some-value")
  .getOrCreate();
  
  // 加载csv文件,此时可能有中文乱码问题可以使用.config("encoding","gbk")指定字符集--gbk根据具体文件字符集指定
  Dataset<Row> df = spark.read().csv("path/people.csv");
  
  df.show();
  
  //查询 name字段
  df.select("name").show();
  //给所有人年龄+1 
  df.select(col("name"), col("age").plus(1)).show();
  //年龄大于18岁
  df.filter(col("age").gt(18)).show();
  
  //按年龄汇总数量
  df.groupBy("age").count().show();
  
  // 当需要指定自定义的类型时,也可以
  Encoder<Person> personEncoder = Encoders.bean(Person.class);
  Dataset<Person> peopleDS = spark.read().csv(path).as(personEncoder);
  df.show();
  
  //还可以注册临时视图
  df.createGlobalTempView("people");
  //然后
  spark.sql("SELECT * FROM  people").show();
  //既然已经注册了 people,后续就可以向spark.sql()方法传入SQL语句完成对数据的分析,这样相对用代码开发更简单了
  
  //若这个Person 不能被提前定义也可以用以下方法
  JavaRDD<String> peopleRDD = spark.sparkContext()
  .csv("examples/src/main/resources/people.csv", 1)
  .toJavaRDD();
  String schemaString = "name age";
  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);

// Convert records of the RDD (people) to Rows
JavaRDD<Row> rowRDD = peopleRDD.map((Function<String, Row>) record -> {
  String[] attributes = record.split(",");
  return RowFactory.create(attributes[0], attributes[1].trim());
});

// Apply the schema to the RDD
Dataset<Row> peopleDataFrame = spark.createDataFrame(rowRDD, schema);
// 至此 ,peopleDataFrame 这个对象其实与上文中 peopleDS 对象一致了 

  

有时候我们从CSV加载的数据列名不符合我们的规范要求,因此需要使用withColumnRenamed('old_column_name', 'new_column_name') 修改列名;

先到此了,上次面试公司提出的一个数据处理机试题与此类似,可惜当时没弄出来,惭愧

 机试题大致如下:

根据提供的csv文件,加载数据进行如下处理

1.加载数据,去除空格和空值

2.对数据中的日期字段转换为标准格式

3.根据身份证号计算年龄,并筛选出18岁以下的数据;

4.根据性别分组统计数据量

5.对2、3、4的结果分别另存csv文件