铸造方法在Java Spark中导致零值



我有一个简单的用例,可以在两个数据范围内执行加入,我正在使用Spark 1.6.3版本。问题是,在尝试使用铸造方法将字符串类型铸造为整数类型时,结果列为所有空值。

我已经尝试了这里提到的所有解决方案如何在数据框架中投放一列?但是所有问题都有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 DataFrame,因此对此有任何帮助。谢谢!

您可以为最后一行尝试这样的事情吗?

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");

相关内容

  • 没有找到相关文章

最新更新