这是一些官方文档没给完的坑.
命令行参数
- 指定jdbc驱动
 
打开shell
1  | [jimo@jimo-pc spark-2.2.0-bin-hadoop2.7]$ bin/spark-shell --driver-class-path /home/jimo/lib/sqljdbc42.jar  | 
运行submit
1  | [jimo@jimo-pc spark-2.2.0-bin-hadoop2.7]$ bin/spark-submit --class "CodeDataFromRDB" --master local[1] --driver-class-path /home/jimo/lib/sqljdbc42.jar /home/jimo/target/scala-2.11/aprioritest_2.11-0.1.jar  | 
spark jdbc
官方地址:
例子代码:
1  | val spark = SparkSession.builder().appName(s"${this.getClass.getSimpleName}").getOrCreate()  | 
就上面那段sql语句的坑:
- 为什么要cast,因为不这样mark得出的结果是null
 - cast as String,在sqlserver里是cast as varchar,然而这样也行.
 
上面得出的结果是:
1  | dataDF.show(10)  | 
RDD 到 DataSet
分区的问题
下面这样写会产生200个txt文件
1  | markDS.write.text("/home/data/d.txt")  | 
可以这样:
1  | markDS.repartition(1).write.text("/home/data/d.txt")  | 
还有一些是coalesce()
他们的区别是什么?
map之后的结果包含括号的问题
去除某一列的重复元素
原数据:
1  | marks = spark.sql("select distinct(student_id),mark1,mark2,mark3,mark4,mark5,mark6 as reault from mark")  | 
要去除student_id这一列的重复值:
1  | marks = marks.dropDuplicates(['student_id'])  |