我正在以编程方式尝试转换列的数据类型并遇到一些编码问题。
我修改了这里使用的代码。
数据>>任何数字都被读作字符串。
代码>>
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)})
问题是,结果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))})
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。