2017-09-10 12 views
0

私は、彼らが等しくなるように、異なるものを更新するキー他wiseiとして列に基づいて異なっているかどうかを知りたいした2つのデータフレームを、持っている更新データフレームでない場合と等しくスパークデータフレーム

 val TMP_SITE = spark.load("jdbc", Map("url" -> "jdbc:oracle:thin:System/[email protected]//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") 


root 
|-- SITE: long (nullable = true) 
|-- LIBELLE: string (nullable = false) 

root 
|-- id: long (nullable = false) 
|-- name: string (nullable = true) 

参加の結果は、私はこの

ヴァル・TEMP = join.withColumn( "変更"、($ "LIBELLE" ===( "何" 点灯していない "名前" $を、やった

|id |name     |SITE|LIBELLE    | 
+---+----------------------+----+----------------------+ 
|51 |Ezzahra    |51 |Ezzahra    | 
|7 |BENIKHALLED   |7 |BENIKHALLED   | 
|15 |Kram     |15 |Kram     | 
|54 |El Mourouj   |54 |El Mourouj   | 
|11 |LE BARDO    |11 |LE BARDO    | 
|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 |Sousse I I   |64 |Sousse I I   | 
|3 |SAHRA CONFORT : KORBA |3 |SAHRA CONFORT : KORBA | 
|34 |SOUKRA SQUARE   |34 |SOUKRA SQUARE   | 
|59 |SAHRA CONFORT : ZARZIS|59 |SAHRA CONFORT : ZARZIS| 
|8 |Jerba     |8 |Jerba     | 
|22 |Moknine    |22 |Moknine    | 
|28 |RDAYEF    |28 |RDAYEF    | 
|85 |MONASTIR ABSORBA  |85 |MONASTIR ABSORBA  | 
|16 |BARDO HANAYA   |16 |BARDO HANAYA   | 
|35 |Mini M Agba   |35 |Mini M Agba   | 
+---+----------------------+----+----------------------+ 

です))。そうでなければ( "更新が必要")) 私はそれは、彼らが同じであるため、更新する必要があると述べ、なぜ私はしません。この

|id |name     |SITE|LIBELLE    |changes  | 
+---+----------------------+----+----------------------+--------------+ 
|51 |Ezzahra    |51 |Ezzahra    |nothing  | 
|7 |BENIKHALLED   |7 |BENIKHALLED   |nothing  | 
|15 |Kram     |15 |Kram     |nothing  | 
|54 |El Mourouj   |54 |El Mourouj   |nothing  | 
|11 |LE BARDO    |11 |LE BARDO    |nothing  | 
|29 |Mini M Ksar said  |29 |Mini M Ksar said  |nothing  | 
|69 |ZAGHOUAN    |69 |ZAGHOUAN    |nothing  | 
|42 |BEB EL KHADHRA  |42 |BEB EL KHADHRA  |nothing  | 
|73 |Zaouit Kontech  |73 |Zaouit Kontech  |need an update| 
|87 |Aouina    |87 |Aouina    |nothing  | 
|64 |Sousse I I   |64 |Sousse I I   |nothing  | 
|3 |SAHRA CONFORT : KORBA |3 |SAHRA CONFORT : KORBA |nothing  | 
|34 |SOUKRA SQUARE   |34 |SOUKRA SQUARE   |nothing  | 
|59 |SAHRA CONFORT : ZARZIS|59 |SAHRA CONFORT : ZARZIS|nothing  | 
|8 |Jerba     |8 |Jerba     |nothing  | 
|22 |Moknine    |22 |Moknine    |need an update| 
|28 |RDAYEF    |28 |RDAYEF    |nothing  | 
|85 |MONASTIR ABSORBA  |85 |MONASTIR ABSORBA  |nothing  | 
|16 |BARDO HANAYA   |16 |BARDO HANAYA   |nothing  | 
|35 |Mini M Agba   |35 |Mini M Agba   |nothing  | 
+---+----------------------+----+----------------------+--------------+ 

を得ました。 それはすべての人にとって何も言わないはずですが、彼らは平等ですから。 あなたがcolumnsrowsでプレイして非常に簡単dataframeを、持っていたら、すべてのヘルプは

答えて

1

を理解すべきです。

ですから、dataframe次あなた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")) 

tempdataframeとしてwhen機能を使用することにより

だろう
+----+---------------------+----+---------------------+--------------+ 
|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  | 
+----+---------------------+----+---------------------+--------------+ 

は今、あなただけselectgroupByaggregationsfiltersや作り付けのその他を使ってあなただけの列でプレイする必要があなたに

+----+-------+---+----+--------------+ 
|SITE|LIBELLE|id |name|changes  | 
+----+-------+---+----+--------------+ 
|992 |test2 |992|test|need an update| 
+----+-------+---+----+--------------+ 

を与えるべきdataframe

として
temp.filter($"changes" === "need an update").show(false) 

filterメソッドを使用することができます関数を使用するかudf関数などを使用するなどして、rddtuplesにも変換できます。

+0

私は質問を更新しました。私はあなたの提案を試してみませんか?ありがとうございました。 –

+0

単語の後に空白がないかチェックしてください。私はテーブルの1つに単語の後にスペースがあると思います。 –

+0

あなたは正しいです、私はちょうどトリム機能でそれを修正しました –

関連する問題