2017-08-11 8 views
-1

私は短いSparkスクリプトを書くためにScalaを使っていますが、私は何か変わったことに気付きました。 DataFrameを作成して操作を実行する場合は、何もインポートする必要はありません。たとえば、Scalaでは、戻り値の型として使用する場合にのみ、何かをインポートする必要がありますか?

val df = sqlContext.read.json("somePath") 
df.show(false) 

が正常に動作します。しかし、私はデータフレームを返すメソッドを書きたいならば、私は明示的に

import org.apache.spark.sql.DataFrame 

def foo(path:String) : DataFrame = { 
    val df = ... 
    return df 
} 

答えて

4

インポートステートメントは、名前をスコープに入れて、修飾されていない名前で参照できるようにします。つまり、DataFrameをインポートすると、フル・ネームorg.apache.spark.sql.DataFrameを書く代わりに、DataFrameと書くことができます。

名前を書いても問題ない場合や、名前をまったく書いていない場合は、インポートする必要はありません。あなたの最初のコードでは、後者が当てはまります。

PS:メソッドの最後にreturn文は必要ありません。メソッドの最後の式が自動的に返されます。

+0

Gotcha、ありがとう!私はreturn文を必要としないことを知っていましたが、javaプログラマとして、私はそれを含めて間違っていると感じています:) – alexgbelov

+0

コンパイラに型を推測させ、DataFrameを省略させます。また、スパークシェルでは、いくつかの輸入品を無料で手に入れることができます。 https://github.com/apache/spark/blob/master/repl/scala-2.11/src/main/scala/org/apache/spark/repl/SparkILoop.scala#L39L68 –

1
def foo(path:String) : org.apache.spark.sql.DataFrame = { 
    val df = ... 
    return df 
} 

最初のデータフレームクラスをインポートする必要があり、インポートせずに動作します。短い名前を使用する場合にのみインポートする必要があります。

関連する問題