在Scala Spark中以编程方式将所有特定数据类型列转换为其他数据类型-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

在Scala Spark中以编程方式将所有特定数据类型列转换为其他数据类型

社区小助手 2018-12-05 15:16:49 1651

我正在以编程方式尝试转换列的数据类型并遇到一些编码问题。

我修改了这里使用的代码。

数据>>任何数字都被读作字符串。

代码>>

import org.apache.spark.sql
raw_data.schema.fields

.collect({case x if x.dataType.typeName == "string" => x.name})
.foldLeft(raw_data)({case(dframe,field) => dframe(field).cast(sql.types.IntegerType)})

错误>>

:75: error: type mismatch;
found : org.apache.spark.sql.Column
required: org.apache.spark.sql.DataFrame

(which expands to)  org.apache.spark.sql.Dataset[org.apache.spark.sql.Row]
       .foldLeft(raw_data)({case(dframe,field) => dframe(field).cast(sql.types.IntegerType)})
分布式计算 Scala Spark
分享到
取消 提交回答
全部回答(1)
  • 社区小助手
    2019-07-17 23:18:25

    问题是,结果dframe(field).cast(sql.types.IntegerType)中foldLeft为列,然而,继续迭代一个数据帧的预期。在dframe.drop(field)使用最初来自代码的链接中,它确实返回数据帧并因此起作用。

    要解决此问题,只需使用withColumn哪个将调整特定列,然后返回整个数据帧:

    foldLeft(raw_data)({case(dframe, field) => dframe.withColumn(field, dframe(field).cast(sql.types.IntegerType))})

    0 0
大数据
使用钉钉扫一扫加入圈子
+ 订阅

大数据计算实践乐园,近距离学习前沿技术

推荐文章
相似问题