如何在Spark sql中将列转换为Int

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Spark sql中将列转换为Int相关的知识,希望对你有一定的参考价值。

我想在数据帧中取最后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")
                                                                                      ^

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

答案

你是直接在你的数据集上写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|
+--------------+------+------+

以上是关于如何在Spark sql中将列转换为Int的主要内容,如果未能解决你的问题,请参考以下文章

在 spark sql 中将字符串类型转换为数组类型

在 Spark 中将数据框列转换为向量

如何将具有嵌套StructType的列转换为Spark SQL中的类实例?

如何在 Spark 2 Scala 中将 Row 转换为 json

如何在 Spark SQL 中将额外参数传递给 UDF?

如何在 Spark Scala 中将 WrappedArray 转换为 List?