【问题标题】:How do i convert a Column to Int in Spark sql如何在 Spark sql 中将 Column 转换为 Int
【发布时间】:2018-03-02 19:21:52
【问题描述】:

我想在数据框中取字符串的最后 6 个字符

 val loc ="/data/published/omega/omega_logs/20171205_4801"
 val df =sqlContext.read.avro(loc)
 val df1 = df.withColumn("sub_str", substring(df("broadcast_end_date_time"),9,14)).select("broadcast_end_date_time","sub_str")

上面的代码有效。但我不想在我的子字符串函数中硬编码 14 。我如何找到列的长度并将其转换为 Int

 +-----------------------+-------+
 |broadcast_end_date_time|sub_str|
  +-----------------------+-------+
 |20171205124000         |124000 |
 |20171205254000         |254000 |
 |20171205143000         |143000 |
 |20171205111000         |111000 |
 |20171205124000         |124000 |

我正在尝试以下代码,但出现以下错误

 val df1 = df.withColumn("sub_str", substring(df("broadcast_end_date_time"),9,length(df("broadcast_end_date_time")))).select("broadcast_end_date_time","sub_str")

似乎 length 函数返回一个 Column 。我如何将其转换为 Int

 scala> val df1 = df.withColumn("sub_str", substring(df("broadcast_end_date_time"),9,length(df("broadcast_end_date_time")))).select("broadcast_end_date_time","sub_str")
 <console>:52: error: type mismatch;
 found   : org.apache.spark.sql.Column
 required: Int
   val df1 = df.withColumn("sub_str", substring(df("broadcast_end_date_time"),9,length(df("broadcast_end_date_time")))).select("broadcast_end_date_time","sub_str")
                                                                                      ^

有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: apache-spark-sql


    【解决方案1】:

    您是直接在您的数据集上编写 SQL 查询,我是 spark sql 开发人员,我完成了您的要求,这可能对您有所帮助。

    actualDataset.createOrReplaceTempView("Test");
    actualDataset.show();
     Dataset<Row> resultDataSet = spark.sql("SELECT value, substring(value, 9,length(value)) substr, length(value) length from Test");
    resultDataSet.show();
    

    输出:

    +--------------+
    |         value|
    +--------------+
    |20171205124000|
    |20171205254000|
    |20171205143000|
    +--------------+
    
    +--------------+------+------+
    |         value|substr|length|
    +--------------+------+------+
    |20171205124000|124000|    14|
    |20171205254000|254000|    14|
    |20171205143000|143000|    14|
    +--------------+------+------+
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-03
      • 2017-12-10
      • 2012-06-26
      • 2014-07-24
      • 1970-01-01
      • 2018-02-18
      • 2019-02-11
      • 1970-01-01
      相关资源
      最近更新 更多