apache-spark - 在 Spark SQL DSL 中计算字符串长度

标签 apache-spark apache-spark-sql string-length

编辑:这是一个关于 Spark 1.2 的老问题

为了 orderBy 的目的,我一直在尝试动态计算 SchemaRDD 中字符串列的长度。我正在学习 Spark SQL,所以我的问题完全是关于使用 DSL 或 Spark SQL 公开的 SQL 接口(interface),或者了解它们的局限性。

例如,我的第一次尝试是使用集成的关系查询

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)

它通过设置工作(开箱即用的 spark 1.2.1 和 hadoop 2.4):
[2,Two,3]
[1,One,3]
[3,Three,5]

关于apache-spark - 在 Spark SQL DSL 中计算字符串长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28544774/

相关文章:

java - 如何使用 JTextArea 输入字符串的字符查找单词的平均值

python - 使用 'max' 和 'len' 正确格式化列表的第 10 项

apache-spark - 如何设置 spark 使用特定数量的内核?

hadoop - 为什么有人会在 Tez 上运行 Spark/Flink?

scala - 仅使用 Spark-SQL API 时广播变量的使用

sql - 对象 sql 不是包 org.apache.spark 的成员

scala - 为什么Spark RDD不支持 "flatten"

maven - 如何使用 *local* 包运行 spark shell?

apache-spark - 使用 Dataframes 从 Informix 到 Spark 的 JDBC

c++ - 如何获取字符串数组的字符串长度?