编辑:这是一个关于Spark 1.2的老问题
我一直在尝试动态计算SchemaRDD中字符串列的长度,以实现orderBy目的。我正在学习Spark SQL,所以我的问题严格是关于使用Spark SQL公开的DSL或SQL接口,还是要了解它们的局限性。
我的第一个尝试是使用集成的关系查询,例如
notes.select('note).orderBy(length('note))
编译时没有运气:
error: not found: value length
(这让我想知道在哪里可以找到该DSL可以真正解析的“表达式”。例如,它解析“ +”来添加列。)
然后我尝试
sql("SELECT note, length(note) as len FROM notes")
这失败了
java.util.NoSuchElementException: key not found: length
(然后,我重新阅读了此文件(我正在运行1.2.0))http://spark.apache.org/docs/1.2.0/sql-programming-guide.html#supported-hive-features,想知道Spark SQL在什么意义上支持列出的配置单元功能。)
问题:表达式和/或SQL语句中是否真正支持长度运算符?如果是,语法是什么?(奖金:是否有关于Spark SQL表达式中所解析的内容以及一般语法的特定文档?)
谢谢!
在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)
它可以通过设置来工作(带有hadoop 2.4的开箱即用火花1.2.1):
[2,Two,3]
[1,One,3]
[3,Three,5]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句