Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如果数据帧不相等,则更新数据帧_Scala_Apache Spark_Apache Spark Sql - Fatal编程技术网

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
元组