Spark scala Dataframe:如何将自定义类型应用于现有数据框?

Posted

技术标签:

【中文标题】Spark scala Dataframe:如何将自定义类型应用于现有数据框?【英文标题】:Spark scala Dataframe : How can i apply custom type to an existing dataframe? 【发布时间】:2021-03-11 18:15:02 【问题描述】:

我有一个数据框 (dataDF),其中包含如下数据:

firstColumn;secondColumn;thirdColumn
myText;123;2010-08-12 00:00:00

在我的例子中,所有这些列都是 StringType。

另一方面,我有另一个 DataFrame (customTypeDF) 可以修改并包含 some 列的自定义类型,如:

columnName;customType
secondColumn;IntegerType
thirdColumn; TimestampType

如何动态在我的 dataDF 数据框上应用新类型?

【问题讨论】:

【参考方案1】:

您可以使用作为 Seq 收集的 customTypeDF 映射列名:

val colTypes = customTypeDF.rdd.map(x => x.toSeq.asInstanceOf[Seq[String]]).collect

val result = dataDF.select(
    dataDF.columns.map(c => 
        if (colTypes.map(_(0)).contains(c)) 
        col(c).cast(colTypes.filter(_(0) == c)(0)(1).toLowerCase.replace("type","")).as(c) 
        else col(c)
    ):_*
)

result.show
+-----------+------------+-------------------+
|firstColumn|secondColumn|        thirdColumn|
+-----------+------------+-------------------+
|     myText|         123|2010-08-12 00:00:00|
+-----------+------------+-------------------+

result.printSchema
root
 |-- firstColumn: string (nullable = true)
 |-- secondColumn: integer (nullable = true)
 |-- thirdColumn: timestamp (nullable = true)

【讨论】:

以上是关于Spark scala Dataframe:如何将自定义类型应用于现有数据框?的主要内容,如果未能解决你的问题,请参考以下文章

Spark scala Dataframe:如何将自定义类型应用于现有数据框?

如何使用 JSON 映射文件在 Spark 中使用 Scala 生成新的 DataFrame

Spark将DataFrame数据sftp到指定机器(scala)

Spark-Scala:使用异常处理将固定宽度线解析为 Dataframe Api

将 Spark Dataframe 转换为 Scala Map 集合

如何在 Scala(Spark 2.0)中将带有字符串的 DataFrame 转换为带有 Vectors 的 DataFrame