0

2 つのデータフレームで結合を実行する単純なユース ケースがあり、spark 1.6.3 バージョンを使用しています。問題は、キャスト メソッドを使用して文字列型を整数型にキャストしようとすると、結果の列がすべて null 値になることです。

ここに記載されているすべてのソリューションを既に試しましたデータフレームで列をキャストする方法は? しかし、すべての質問にはscala apiの回答があり、Java apiで動作する人を見つけることができませんでした.

DataFrame dataFromDB = getDataFromDB("(select * from schema.table where 
col1 is not null)"); //This method uses spark sql 
                    //to connect to a db2 data base and get the data

//I perform the cast operation as
dataFromDB.withColumn("INCOME_DATA", dataFromDB.col("INCOME_DATA")
                                    .cast(DataTypes.IntegerType));
//but the above results in null values
//other things I tried based on the link above is below
dataFromDB.selectExpr(cast("INCOME_DATA" as integer")) //this too produces null values

//I tried to remove the whitespaces from income data column with no success
dataFromDB.select(dataFromDB.col("INCOME_DATA").toString().replaceAll("\\s+", ""); //this does not remove any whitespace

解決策を見つけることができません。また、変換しようとしている列は文字列型であり、末尾に空白が含まれている可能性があります。これは問題になる可能性がありますか? はいの場合、どうすれば削除できますか。以下のように削除しようとしましたが、うまくいかないようです。これは、spark データフレームを使用する初めての作業であるため、これに関するヘルプをいただければ幸いです。ありがとう!

4

1 に答える 1

0

最後の行でこのようなことを試してもらえますか?

import org.apache.spark.sql.functions._
dataFromDB.withColumn("INCOME_DATA", regexp_replace($"INCOME_DATA", "\\s+", "")).select("INCOME_DATA")

Java の場合:

dataFromDB.withColumn("INCOME_DATA", functions.regexp_replace(functions.col("INCOME_DATA"), "\\s+", "")).select("INCOME_DATA");
于 2018-12-19T22:07:18.457 に答える