以迭代方式更改列类型 Spark 数据框



我在 Scala 中有一个列名列表,比如

var cols = List("col1", "col2", "col3","col4")

我还有一个带有这些列的数据框,但都是字符串。现在我想通过循环访问数据帧的列表或列来强制转换数据帧列,因为我的列列表非常大,我负担不起使用这么多.withColumn参数

提前致谢

如果您预先知道输出类型,只需使用与此类似的内容在列上进行映射即可

val df = sc.parallelize(Seq(
  ("foo", "1.0", "2", "true"),
  ("bar", "-1.0", "5", "false")
)).toDF("v", "x", "y", "z")
val types = Seq(
  ("v", "string"), ("x", "double"), ("y", "bigint"), ("z", "boolean")
)
df.select(types.map{case (c, t) => col(c).cast(t)}: _*)

如果你不知道类型问题要棘手得多。虽然可以创建可以处理架构推理的自定义解析器,但修复上游管道可能更有意义。当您忽略数据类型时,使用 Avro 有什么意义。

如果要

将特定类型的多个列更改为另一个列而不指定单个列名。我已经在这里发布了我的答案 https://stackoverflow.com/a/60552157/3351492

相关内容

  • 没有找到相关文章

最新更新