Scala 如果数据帧不相等,则更新数据帧
我有两个数据帧,其中我想知道它们是否基于列作为键而不同,否则将更新不同的数据帧,使它们相等Scala 如果数据帧不相等,则更新数据帧,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,我有两个数据帧,其中我想知道它们是否基于列作为键而不同,否则将更新不同的数据帧,使它们相等 val TMP_SITE = spark.load("jdbc", Map("url" -> "jdbc:oracle:thin:System/maher@//localhost:1521/XE", "dbtable" -> "IPTECH.TMP_SITE")) .withColumn("SITE",'SITE.cast(LongType)) val local_pos = s
val TMP_SITE = spark.load("jdbc", Map("url" -> "jdbc:oracle:thin:System/maher@//localhost:1521/XE", "dbtable" -> "IPTECH.TMP_SITE"))
.withColumn("SITE",'SITE.cast(LongType))
val local_pos = spark.load("jdbc", Map("url" -> url, "dbtable" -> "pos")).select("id","name")
TMP_SITE.printSchema()
local_pos.printSchema()
val join = TMP_SITE.join(local_pos, 'SITE === 'id, "inner")
根目录
|--站点:长(nullable=true)
|--LIBELLE:string(nullable=false)
根
|--id:long(nullable=false)
|--名称:字符串(nullable=true)
加入的结果是
| id | name | SITE | LIBELLE|
+---+----------------------+----+----------------------+
|51 |埃扎赫拉| 51 |埃扎赫拉|
|7 | BENIKHALLED | 7 | BENIKHALLED|
|15 |克拉姆| 15 |克拉姆|
|54 | El Mouruj | 54 | El Mouruj|
|11 |勒巴尔多| 11 |勒巴尔多|
|29 | Mini M Ksar said | 29 | Mini M Ksar said|
|69 | ZAGHOUAN | 69 | ZAGHOUAN|
|42 | BEB EL-KHADHRA | 42 | BEB EL-KHADHRA|
|73 | Zaouit Kontech | 73 | Zaouit Kontech|
|87 | Aouina | 87 | Aouina|
|64 |苏塞一世| 64 |苏塞一世|
|3 |萨赫拉冲突:科尔巴| 3 |萨赫拉冲突:科尔巴|
|34 |苏克拉广场| 34 |苏克拉广场|
|59 | SAHRA CONFORT:ZARZIS | 59 | SAHRA CONFORT:ZARZIS|
|8 |杰尔巴| 8 |杰尔巴|
|22 |莫克宁| 22 |莫克宁|
|28 |尔达耶夫| 28 |尔达耶夫|
|85 |蒙纳斯蒂尔吸收剂| 85 |蒙纳斯蒂尔吸收剂|
|16 |巴尔多·哈纳亚| 16 |巴尔多·哈纳亚|
|35 |迷你们Agba | 35 |迷你们Agba|
+---+----------------------+----+----------------------+
是我干的
val temp = join.withColumn("changes", when($"LIBELLE" === $"name", lit("nothing")).otherwise("need an update"))
我知道了
| id | name | SITE | LIBELLE |更改|
+---+----------------------+----+----------------------+--------------+
|51 | Ezzahra | 51 | Ezzahra |什么都没有|
|7 | Benikhaled | 7 | Benikhaled |什么都没有|
|15 |克拉姆| 15 |克拉姆|什么都没有|
|54 | El Mouruj | 54 | El Mouruj |什么都没有|
|11 |勒巴尔多| 11 |勒巴尔多|什么都没有|
|29 | Mini M Ksar说| 29 | Mini M Ksar说|什么也没说|
|69 | ZAGHOUAN | 69 | ZAGHOUAN |没什么|
|42 | BEB EL-KHADHRA | 42 | BEB EL-KHADHRA |什么都没有|
|73 | Zaouit Kontech | 73 | Zaouit Kontech |需要更新|
|87 | Aouina | 87 | Aouina |什么都没有|
|64 |苏塞I I | 64 |苏塞I I |什么都没有|
|3 |撒哈拉冲突:科尔巴| 3 |撒哈拉冲突:科尔巴|什么都没有|
|34 |苏克拉广场| 34 |苏克拉广场|什么都没有|
|59 | SAHRA CONFORT:ZARZIS | 59 | SAHRA CONFORT:ZARZIS |什么都没有|
|8 |杰尔巴| 8 |杰尔巴|没什么|
|22 | Moknine | 22 | Moknine |需要更新吗|
|28 | RDAYEF | 28 | RDAYEF |什么都没有|
|85 |蒙纳斯蒂尔吸收剂| 85 |蒙纳斯蒂尔吸收剂|无|
|16 |巴尔多·哈纳亚| 16 |巴尔多·哈纳亚|什么都没有|
|35 | Mini M Agba | 35 | Mini M Agba |无|
+---+----------------------+----+----------------------+--------------+
我不明白为什么它说它们需要更新,因为它们是相同的。
虽然它不应该对所有这些都说什么,因为一旦你有了
数据帧
,它们是相等的,但是使用列
和行
非常容易
因此,在您的join
+----+---------------------+----+---------------------+
|SITE|LIBELLE |id |name |
+----+---------------------+----+---------------------+
|48 |Mini M Boumhel |48 |Mini M Boumhel |
|67 |Lac |67 |Lac |
|992 |test2 |992 |test |
|44 |KAIROUAN |44 |KAIROUAN |
|61 |Tunis |61 |Tunis |
|9001|MONOPRIX |9001|MONOPRIX |
|3 |SAHRA CONFORT : KORBA|3 |SAHRA CONFORT : KORBA|
|37 |Mini M Borj Lozir |37 |Mini M Borj Lozir |
|83 |Jendouba |83 |Jendouba |
|12 |Bigro |12 |Bigro |
+----+---------------------+----+---------------------+
您可以使用所编写的逻辑创建另一列,但可以在函数为
import org.apache.spark.sql.functions._
val temp = join.withColumn("changes", when($"LIBELLE" === $"name", lit("nothing")).otherwise("need an update"))
temp
dataframe
将
+----+---------------------+----+---------------------+--------------+
|SITE|LIBELLE |id |name |changes |
+----+---------------------+----+---------------------+--------------+
|48 |Mini M Boumhel |48 |Mini M Boumhel |nothing |
|67 |Lac |67 |Lac |nothing |
|992 |test2 |992 |test |need an update|
|44 |KAIROUAN |44 |KAIROUAN |nothing |
|61 |Tunis |61 |Tunis |nothing |
|9001|MONOPRIX |9001|MONOPRIX |nothing |
|3 |SAHRA CONFORT : KORBA|3 |SAHRA CONFORT : KORBA|nothing |
|37 |Mini M Borj Lozir |37 |Mini M Borj Lozir |nothing |
|83 |Jendouba |83 |Jendouba |nothing |
|12 |Bigro |12 |Bigro |nothing |
+----+---------------------+----+---------------------+--------------+
现在您只需在dataframe
上使用filter
方法即可
temp.filter($"changes" === "need an update").show(false)
应该给你什么
+----+-------+---+----+--------------+
|SITE|LIBELLE|id |name|changes |
+----+-------+---+----+--------------+
|992 |test2 |992|test|need an update|
+----+-------+---+----+--------------+
您只需使用select
、groupBy
、aggregations
、filters
和其他内置函数或使用udf
函数等来处理这些列。您甚至可以像在示例中那样转换为rdd
和元组