私が扱っているデータにはスキーマの変更がありました。古いデータと新しいデータを組み合わせた結果のdataFrameの場合、変換およびフィルタリングしたい列は、古いデータには存在しませんでした。「null」は入力されません。可能な限り、その列を変換してフィルター処理したいと考えています。そのような列のない以前のデータについては、すべての行を保持します。
java.lang.NullPointerException
問題は、以前のデータに「ip」列がないため、次のコードの結果が になることです。
val filteredData = sqlContext.sql(
s"SELECT $fieldsString FROM data $filterTerm")
.withColumn("ip",firstIp($"ip"))
.filter("`ip` not in ('30.90.30.90', '70.80.70.80')")
.filter("`ip` not like '10.%'")
上記の「firstIp」関数は、配列から最初の IP アドレスを取得する単純な udf です。によって定義されval firstIp = udf[String, String](_.split(",")(0))
ます。スキーマごとにデータを 2 つの部分 ("ip" 列があるものとないもの) に分割したくありません... しかし、データをそのように分割しなくても目的を達成できますか?