【发布时间】: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