请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

如何添加主键

PK哥,请问怎样为写出去的一张表指定主键id呢。
从网上搜索到的解决方案是:

val filterDS: Dataset[Row] = jdbcDF.select("name", "image").filter( $"name" === "华为" || $"name" === "小米")

// 在原Schema信息的基础上添加一列“id”信息
val schema: StructType = filterDS.schema.add(StructField("id", LongType))

// DataFrame转RDD, 然后调用 zipWithIndex
val dfRDD: RDD[(Row, Long)] = filterDS.rdd.zipWithIndex()

// 将id字段合并在一起,merge顺序不可修改,因为添加id的schema字段在最后一个
val rowRDD: RDD[Row] = dfRDD.map(tp => Row.merge(tp._1, Row(tp._2)))

// 将添加了索引的RDD转化为 DataFrame
val result: DataFrame = spark.createDataFrame(rowRDD, schema)

执行后写入数据库的结果表,发现id列并没有加上主键约束,只是单纯的一个值。
图片描述
请问PK哥,该如何加上约束呢?

正在回答

2回答

Michael_PK 2020-02-12 14:27:30

大数据批处理里面一般很少用主键的概念,批处理处理一个批次,这一般是和分区对应,操作的数据是整个分区的数据。当然你要使用主键也不是不行

0 回复 有任何疑惑可以回复我~
  • 提问者 M_996 #1
    因为最近有个统计业务,现在使用SQL语句去查询统计千万级数据,查询速度很慢,所以想改用Spark SQL试下。因为项目是使用SpringBoot、JPA框架的,所以创建业务实体的时候,需要指定个主键。
    回复 有任何疑惑可以回复我~ 2020-02-12 14:38:33
  • 提问者 M_996 #2
    使用ID自增的话,是要自己手动创建表吗,Spark SQL的savemode指定成append模式吗
    回复 有任何疑惑可以回复我~ 2020-02-12 14:40:31
  • Michael_PK 回复 提问者 M_996 #3
    千万不要把SQL对等到sparksql上去,sparksql是离线框架,不可能使用他来做所见即所得的功能的
    回复 有任何疑惑可以回复我~ 2020-02-12 14:50:49
Michael_PK 2020-02-12 14:28:13

你要是使用主键,那就是MySQL中ID自增就可以了

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信