这是一些官方文档没给完的坑.
命令行参数
- 指定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']) |