私はすべての3つの列が文字列型であると仮定しています。その場合、私は以下のスニペットを使用してこれを解決します。私はエラーレコードを確認するために2つのudfを作成しました。
- フィールドは、[
isNumber
]
- 数字だけを持っている場合、文字列フィールドには、どのような条件3'rdの[
isEmpty
]
コードスニペット
import org.apache.spark.sql.functions.row_number
import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.functions.udf
val df = rdd.zipWithIndex.map({case ((x,y,z),index) => (index+1,x,y,z)}).toDF("row_num", "c1", "c2", "c3")
val isNumber = udf((x: String) => x.replaceAll("\\d","") == "")
val isEmpty = udf((x: String) => x.trim.length==0)
val errDF = df.filter(isNumber($"c1") || isEmpty($"c2"))
val validDF = df.filter(!(isNumber($"c1") || isEmpty($"c2")))
scala> df.show()
+-------+---+-----+-----+
|row_num| c1| c2| c3|
+-------+---+-----+-----+
| 1|JFK| 1201| 1209|
| 2|LAX| 1208| 1212|
| 3|NYC| | 1209|
| 4| 22| 1201| 1209|
| 5|SFO| 1202| 1209|
+-------+---+-----+-----+
scala> errDF.show()
+-------+---+----+----+
|row_num| c1| c2| c3|
+-------+---+----+----+
| 3|NYC| |1209|
| 4| 22|1201|1209|
+-------+---+----+----+
空の場合4行目はエラーファイルに拒否されますか? –
@ 3rd arrDateの@ rogue-oneは空であり、4行目の位置データはStringでなければなりません。これらは拒絶の条件です。 –