2017-04-13 3 views
0

動的データフレームから、テンポラブルを登録しようとしています。sparkで誘惑的な誘惑力のある動的データフレームを作成する

出力を文字列として取得していますが、データフレームを実行したり、文字列をデータフレームに変換して誘惑を作成す​​る方法があるかどうかはわかりません。ここで

は、この問題を再現する手順は、次のとおりです。ここ

import org.apache.spark.sql._ 

val contact_df = sc.makeRDD(1 to 5).map(i => (i, i * i)).toDF("value", "square") 
val acct_df = sc.makeRDD(1 to 5).map(i => (i, i/i)).toDF("value", "devide") 

val dataframeJoins = Array( 
    Row("x","","","" ,"Y","",1,"contact_hotline_df","contact_df","acct_nbr","hotline_df","tm49_acct_nbr"), 
    Row("x","","","","Y","",2,"contact_hotline_acct_df","acct_df","tm06_acct_nbr" ,"contact_hotline_df","acct_nbr") 
) 

val dfJoinbroadcast = sc.broadcast(dataframeJoins) 

val DFJoins1 = for (row <- dfJoinbroadcast.value) yield { 
    (row(8)+".registerTempTable(\""+row(8)+"\")") 
} 

for (rows <- 0 until DFJoins1.size){ 
    println(DFJoins1(rows)) 
    DFJoins1(rows) 
} 

は、forループ上記の出力である:

contact_df.registerTempTable("contact_df") 
acct_df.registerTempTable("acct_df") 

私はエラーを取得しておりません。しかし、テーブルは作成されていません。

私はsqlContext.sql( "select * from contact_df")と言うと、テーブルが作成されていないというエラーが表示されます。

文字列をデータフレームに変換し、データフレームを実行して魅力的なものを作成する方法はありますか?

お勧めします。

おかげで、 Sreehari

+0

私はあなたのコードを理解しようとしていますが、それは非常に不器用だが。私はスタートのためにいくつかのインデントを入れました。最初の大文字でメソッドを呼び出さないでください。 –

+0

forループは基本的に 'contact_df.registerTempTable(" contact_df ")'を出力しますが、このコードは実行しません。また、代わりに、新しい 'createOrReplaceTempView()'メソッドを使用したいと思います。 –

+0

'.map(i =>(i、i/i))' - > '.map((_、1))'あなたの質問に? –

答えて

0

はあなたのコードは、文字列を連結し、その結果を印刷し、それはそれです。 registerTempTableメソッドが呼び出されていないため、SQLクエリでそのメソッドを使用できません。これを行うにしてください:

// assuming we have this string to object mapping 
val tableNameToDf = Map("contact_df" -> contact_df, "acct_df" -> acct_df) 

あなたのforループのようなものに再構築することができます:

val dfJoins = for (row <- dfJoinbroadcast.value) yield { 
    val wannabeTable = row(8) 
    tableNameToRdd(wannabeTable).createOrReplaceTempView(wannabeTable) 
    wannabeTableName 
} 
関連する問題