метод cast приводит к нулевым значениям в 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

Я не могу найти решение для этого, также столбец, который я пытаюсь преобразовать, имеет тип String и может содержать конечные пробелы, может ли это быть проблемой? если да, то как я могу их удалить, я пытался удалить их, как показано ниже, но, похоже, не работает. Это моя первая работа с фреймворком данных Spark, поэтому любая помощь в этом очень ценится. Спасибо!


person humblecoder    schedule 19.12.2018    source источник
comment
Привет, не могли бы вы предоставить небольшой набор входных данных, с которым у вас возникла проблема, пожалуйста?   -  person jeanr    schedule 20.12.2018


Ответы (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");
person mayurc    schedule 19.12.2018
comment
Я не думаю, что предоставленное вами решение работает для Java. Это Scala-решение? Я хочу путь Java. Спасибо за ваш ответ! - person humblecoder; 20.12.2018