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