2017-03-20 12 views
-4

spark 1.6.1バージョンを使用しています。私はループでdataframeを実行する必要があります。Spark(Scala)がforループ内でデータフレームを実行

for (i <- List ('a','b')){ 
val i = sqlContext.sql("SELECT i, col1, col2 FROM DF1")} 

私は、このデータフレームが二回(i = ai = b)を実行することにしたいです。

答えて

1

あなたのコードはほぼ正しいです。二つのものを除き :

  • iは、すでにあなたは、文字列でiの値を使用したい場合はその文字列補間
を使用し、 val i =
  • でそれを使用していない、あなたのforループ内で使用されています

    だからあなたのコードは次のようになります。

    for (i <- List ('a','b')) { 
        val df = sqlContext.sql(s"SELECT $i, col1, col2 FROM DF1") 
        df.show() 
    } 
    

    あなたが.map、その後.reduceLeftでこれを行うことができます

    作者のコメントの後EDITに

    // All your dataframes 
    val dfs = Seq('a','b').map { i => 
        sqlContext.sql(s"SELECT $i, col1, col2 FROM DF1") 
    } 
    
    // Then you can reduce your dataframes into one 
    val unionDF = dfs.reduceLeft((dfa, dfb) => 
        dfa.unionAll(dfb) 
    ) 
    
  • +0

    実は私は(この場合は2、AとBとで)異なるデータフレームを必要としています。 DF1は、データの下に含まれている場合とし - 次いで COL1、COL2 1、 2、B データフレームを** A **が含まれていなければならない: - 、 1、 、2、B とデータフレーム** b **には以下が含まれている必要があります: - b、1、 b、2、 私は30の奇妙な種類のデータフレームを作成し、それらをすべて結合する必要があります。 – XEngineer

    +0

    私はあなたの精度の後に私の答えを編集しました –

    +0

    完璧!それは今働いている。 文字列を引用符で囲むために、私が作った微妙な調整は** $ {'"'} $ i $ {'"'} "**です。 – XEngineer

    関連する問題