转换方法在java spark中导致空值

时间:2018-12-19 16:48:23

标签: java apache-spark apache-spark-sql apache-spark-1.6

我有一个在两个数据帧上执行联接的简单用例,我使用的是spark 1.6.3版本。问题在于,尝试使用强制转换方法将字符串类型转换为整数类型时,结果列均为空值。

我已经尝试过此处How to cast a column in dataframe?中提到的所有解决方案,但是所有问题都有针对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

我无法找到解决方案,我尝试转换的列也是String类型,并且可能包含尾随空格,这可能是一个问题吗?如果是的话,那么我该如何删除它们,我尝试如下删除它们,但似乎无法正常工作。 这是我第一次使用spark数据框,因此深表感谢。谢谢!

1 个答案:

答案 0 :(得分: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");