【问题标题】:Change column types iteratively Spark data frames以迭代方式更改列类型 Spark 数据帧
【发布时间】:2016-05-05 10:35:51
【问题描述】:

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

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

我还有一个包含这些列的数据框,但都是字符串。现在我想通过迭代数据框的列表或列来转换数据框的列,因为我的列列表非常大,我无法承受使用这么多 .withColumn 参数

提前致谢

【问题讨论】:

    标签: apache-spark dataframe apache-spark-sql


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-09
        • 2018-05-14
        • 2017-10-11
        • 1970-01-01
        • 2020-09-23
        • 1970-01-01
        相关资源
        最近更新 更多