Wil*_*ton 5 string-length apache-spark apache-spark-sql
编辑:这是一个关于Spark 1.2的老问题
为了达到目的,我一直在尝试计算SchemaRDD中字符串列的长度.我正在学习Spark SQL,所以我的问题严格来说是使用Spark或Spark SQL公开的SQL接口,或者了解它们的局限性.
我的第一次尝试就是使用集成的关系查询
notes.select('note).orderBy(length('note))
Run Code Online (Sandbox Code Playgroud)
在编译时没有运气:
error: not found: value length
Run Code Online (Sandbox Code Playgroud)
(这让我想知道在哪里可以找到这个DSL实际上可以解决的"表达式".例如,它为列添加解析了"+".)
然后我试了一下
sql("SELECT note, length(note) as len FROM notes")
Run Code Online (Sandbox Code Playgroud)
这失败了
java.util.NoSuchElementException: key not found: length
Run Code Online (Sandbox Code Playgroud)
(然后我重读了这个(我正在运行1.2.0) http://spark.apache.org/docs/1.2.0/sql-programming-guide.html#supported-hive-features 并想知道Spark SQL是什么意思支持列出的蜂巢功能.)
问题:表达式和/或SQL语句中真正支持的长度运算符是什么?如果是,语法是什么?(奖励:是否有关于Spark SQL Expressions中解决的内容的特定文档,以及一般的语法是什么?)
谢谢!
在Spark Shell中试试这个:
case class Note(id:Int,text:String)
val notes=List(Note(1,"One"),Note(2,"Two"),Note(3,"Three"))
val notesRdd=sc.parallelize(notes)
import org.apache.spark.sql.hive.HiveContext
val hc=new HiveContext(sc)
import hc.createSchemaRDD
notesRdd.registerTempTable("note")
hc.sql("select id, text, length(text) from note").foreach(println)
Run Code Online (Sandbox Code Playgroud)
它通过设置工作(开箱即用的火花1.2.1与hadoop 2.4):
[2,Two,3]
[1,One,3]
[3,Three,5]
Run Code Online (Sandbox Code Playgroud)
它现在存在!
你spark.sql("SELECT note, LENGTH(note) as len FROM notes")应该工作。
我正在运行 Spark 2.2.0,刚刚完成并且成功了。
| 归档时间: |
|
| 查看次数: |
15703 次 |
| 最近记录: |