簡體   English   中英

創建一個動態模板作為火花模板

[英]create a register dynamic dataframe as temptable in spark

我正在嘗試從動態數據幀中注冊Temptables。

我將輸出作為字符串獲取。我不確定是否存在執行數據框或將字符串轉換為數據框的方法,以便可以創建臨時表。

以下是復制此問題的步驟:

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

您的代碼將字符串連接起來並輸出結果,僅此而已。 沒有調用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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM