【问题标题】:how to create a column from an existing one in spark如何从火花中的现有列创建列
【发布时间】:2019-09-24 16:26:23
【问题描述】:

我正在尝试通过从现有列计算它来将列添加到数据集:

val test=Seq("aaxxx","bbxxx","ccxxx").toDF
test.show : 
+-----+
|value|
+-----+
|aaxxx|
|bbxxx|
|ccxxx|
+-----+

这就是我想要的:

+-----+----+
|value|val2|
+-----+----+
|aaxxx|aa  |
|bbxxx|bb  |
|ccxxx|cc  |
+-----+----+

为此我尝试过:

val column =test.select("value").as[String].map(e=>e.substring(0,2)).col("value")
test.withColumn("value2", column)

但我得到了:

org.apache.spark.sql.AnalysisException:已解决的属性 value#10 在运算符 !Project [value#1, value#10 AS value2.#17] 中的 value#1 缺失。具有相同名称的属性出现在操作中:值。请检查是否使用了正确的属性。;; !Project [value#1, value#10 AS value2.#17] +- LocalRelation [值#1]

谁能看到我的代码有什么问题,或者有更好的方法来获得所需的结果?

【问题讨论】:

    标签: scala apache-spark apache-spark-sql


    【解决方案1】:

    您可以使用 spark sql 函数子字符串来获取前两个字符:

    import org.apache.spark.sql.function.{substring, col}
    val newDf = test.withColumn("val2", substring(col("value"), 0, 2))
    

    【讨论】:

      【解决方案2】:

      将 withcolumn 与子字符串一起使用

      scala> val test=Seq("aaxxx","bbxxx","ccxxx").toDF
      
      scala> test.show()
      +-----+
      |value|
      +-----+
      |aaxxx|
      |bbxxx|
      |ccxxx|
      +-----+
      
      scala> test.withColumn("val2",substring(col("value"),1,2)).show
      +-----+----+
      |value|val2|
      +-----+----+
      |aaxxx|  aa|
      |bbxxx|  bb|
      |ccxxx|  cc|
      +-----+----+
      

      希望对你有帮助

      【讨论】:

        【解决方案3】:

        以下是三种方法:

        1) 使用函数substring,必须导入

        import org.apache.spark.sql.functions.{substring}
        
        test.withColumn("value2", substring($"value", 0, 2))
        

        2) 在列对象上调用方法substr

        test.withColumn("value2", $"value".substr(0, 2))
        

        3) 使用 SQL 表达式:

        test.selectExpr("value", "substring(value, 0, 2) AS value2")
        

        【讨论】:

          猜你喜欢
          • 2021-03-23
          • 1970-01-01
          • 2019-08-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多