8

編集:これはSpark 1.2に関する古い質問です

orderBy の目的で、SchemaRDD の文字列列の長さをオンザフライで計算しようとしています。私は 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 Expressions で解決されるものと、一般的な構文についての特定のドキュメントはありますか?)

ありがとう!

4

2 に答える 2

6

これを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 with hadoop 2.4):

[2,Two,3]
[1,One,3]
[3,Three,5]
于 2015-02-25T12:35:30.997 に答える