-1
2つのファイルを比較したいのですが、それ以外のレコードが一致しない場合は、一致しないレコードがある別のファイルに読み込まれます。 ファイルとレコード数の両方の各フィールドも比較します。sparkを使って2つのファイルを比較するには?
2つのファイルを比較したいのですが、それ以外のレコードが一致しない場合は、一致しないレコードがある別のファイルに読み込まれます。 ファイルとレコード数の両方の各フィールドも比較します。sparkを使って2つのファイルを比較するには?
のは、あなたが2つのファイルがあるとしましょう:
scala> val a = spark.read.option("header", "true").csv("a.csv").alias("a"); a.show
+---+-----+
|key|value|
+---+-----+
| a| b|
| b| c|
+---+-----+
a: org.apache.spark.sql.DataFrame = [key: string, value: string]
scala> val b = spark.read.option("header", "true").csv("b.csv").alias("b"); b.show
+---+-----+
|key|value|
+---+-----+
| b| c|
| c| d|
+---+-----+
b: org.apache.spark.sql.DataFrame = [key: string, value: string]
あなたが探している一致しないレコードのソート不明であるが、join
との任意の定義によってそれらを見つけるのは簡単です:
scala> a.join(b, Seq("key")).show
+---+-----+-----+
|key|value|value|
+---+-----+-----+
| b| c| c|
+---+-----+-----+
scala> a.join(b, Seq("key"), "left_outer").show
+---+-----+-----+
|key|value|value|
+---+-----+-----+
| a| b| null|
| b| c| c|
+---+-----+-----+
scala> a.join(b, Seq("key"), "right_outer").show
+---+-----+-----+
|key|value|value|
+---+-----+-----+
| b| c| c|
| c| null| d|
+---+-----+-----+
scala> a.join(b, Seq("key"), "outer").show
+---+-----+-----+
|key|value|value|
+---+-----+-----+
| c| null| d|
| b| c| c|
| a| b| null|
+---+-----+-----+
b.csv
のレコードが存在しない場合は、a.csv
:
scala> val diff = a.join(b, Seq("key"), "right_outer").filter($"a.value" isNull).drop($"a.value")
scala> diff.show
+---+-----+
|key|value|
+---+-----+
| c| d|
+---+-----+
scala> diff.write.csv("diff.csv")
ダニエルの返事をありがとう、その私に非常に役立ちます。 – Nathon
ファイルの構造は何ですか? –
CSV形式 – Nathon
スキーマは何ですか?比較列は何ですか?制約はありますか? –