apache-spark - 迭代更改列类型 Spark 数据帧

标签 apache-spark dataframe apache-spark-sql

我在 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 有什么意义。

关于apache-spark - 迭代更改列类型 Spark 数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35054930/

相关文章:

python - 如何将 spark 数据帧保存到 HDFS 上的 csv?

python - 在 Pandas 中如何使用 drop_duplicates 有一个异常(exception)?

python - 在 Pandas 数据框中设置多索引列的顺序

memory - 这是 Spark 流的错误还是内存泄漏?

apache-spark - pyspark fillna 不适用于 ArrayType 列

Cassandra 与批量更新不一致

scala - Spark Scala字符串行数组到pairRDD

apache-spark - Apache spark Word2Vec 中的迭代次数和分区数如何相关?

python - 按索引选择 MultiIndex 数据框中的行而不丢失任何级别

python - PySpark 平等过滤器问题