cast方法导致java spark中的空值

Posted

技术标签:

【中文标题】cast方法导致java spark中的空值【英文标题】:cast method results in null values in java spark 【发布时间】:2018-12-19 16:48:22 【问题描述】:

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

我已经尝试了这里提到的所有解决方案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

我无法找到它的解决方案,而且我尝试转换的列是字符串类型并且可能包含尾随空格,这可能是个问题吗?如果是,那么我该如何删除它们,我尝试如下删除它们,但似乎不起作用。 这是我第一次使用 spark 数据框,因此非常感谢任何帮助。谢谢!

【问题讨论】:

您好,能否提供一个您遇到问题的小型输入数据集? 【参考方案1】:

你可以在最后一行尝试这样的事情吗?

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

【讨论】:

我认为您提供的解决方案不适用于 Java。它是scala解决方案吗?我想要java方式。感谢您的回复!

以上是关于cast方法导致java spark中的空值的主要内容,如果未能解决你的问题,请参考以下文章

Apache Spark:如何使用 Java 在 dataFrame 中的空值列中插入数据

pandas 怎么处理表格中的空值

那些年我们踩过的坑,SQL 中的空值陷阱!

用其他列的频率填充一行中的空值

JS中的空值

增强的 for 循环中的空值检查