我在 DataFrame 中有一個列,它當前是字串格式,具有多個逗號分隔的雙資料型別值(主要是 2 或 3)。請參閱下面的架構快照。
Sample : "619.619620621622, 123.12412512699"
root
|-- MyCol: string (nullable = true)
我想將它轉換為一個 double 陣列,它應該看起來像下面的架構。
Desired : array<double>
[619.619620621622, 123.12412512699]
root
|-- MyCol: array (nullable = true)
| |-- element_value: double (containsNull = true)
我知道如何在單個字串值上執行此操作。現在我想在完整的 DataFrame 列上使用它。
有什么辦法可以使用單/雙線代碼來完成嗎?
uj5u.com熱心網友回復:
split cast應該做的作業:
import org.apache.spark.sql.functions.{col, split}
val df = Seq(("619.619620621622, 123.12412512699")).toDF("MyCol")
val df2 = df.withColumn("myCol", split(col("MyCol"), ",").cast("array<double>"))
df2.printSchema
//root
// |-- myCol: array (nullable = true)
// | |-- element: double (containsNull = true)
uj5u.com熱心網友回復:
假設起點:
val spark: SparkSession = ???
import spark.implicits._
val df: DataFrame = ???
這是一個基于UDF的解決方案:
import org.apache.spark.sql.functions._
def toDoubles: UserDefinedFunction =
udf { string: String =>
string
.split(",")
.map(_.trim) //based on your input you may need to trim the strings
.map(_.toDouble)
}
df
.select(toDoubles($"MyCol") as "doubles")
編輯:toDouble轉換已經修剪了字串
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/374914.html
下一篇:將字串串列轉換為結構串列
