Apache spark 在spark中创建一个注册动态数据帧

Apache spark 在spark中创建一个注册动态数据帧,apache-spark,apache-spark-sql,spark-dataframe,Apache Spark,Apache Spark Sql,Spark Dataframe,我正在尝试从动态数据帧注册Emptables 我将以字符串的形式获取输出。我不确定是否有方法执行dataframe或将字符串转换为dataframe,以便创建诱惑 以下是复制此问题的步骤: 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 =

我正在尝试从动态数据帧注册Emptables

我将以字符串的形式获取输出。我不确定是否有方法执行dataframe或将字符串转换为dataframe,以便创建诱惑

以下是复制此问题的步骤:

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)
}
我没有得到任何错误。但是这个表并没有被创建

当我说sqlContext.sql(“select*from contact_df”)时,我得到一个错误,即表没有创建

是否有一种方法可以将字符串转换为数据帧并执行数据帧以创建可诱惑的

请建议

谢谢,
Sreehari

您的代码将字符串串联起来并打印结果,就是这样。未调用
registerEmptable
方法,这就是为什么不能在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
}

val-dfJoins=for(行)我试图理解您的代码,但它非常笨拙。我在那里为开始添加了一些缩进。不要用大写字母调用该方法。for循环基本上打印了
contact_-df.registerTempTable(“contact_-df”)
但不执行此代码。另外,我将使用较新的
createOrReplaceTempView()
方法来代替
.map(I=>(I,I/I))
->
.map((u,1))
无论如何,这与您的问题有什么关系?@JiriKremser感谢您的建议。我将继续使用较新的createOrReplaceTempView。根据我提供的代码,我希望for循环创建临时表,以便我可以在此后的select查询中使用临时表。但是,临时表没有得到created根据代码中的当前逻辑。请告诉我是否有方法在for循环中创建临时表。当然可以在循环中创建临时表,但实际上您并没有创建临时表。您只是打印要执行的代码。类似的做法是执行
println(“1+1”)
并想知道它为什么要打印
1+1
2
:]
val dfJoins = for (row <- dfJoinbroadcast.value) yield {
   val wannabeTable = row(8)
   tableNameToRdd(wannabeTable).createOrReplaceTempView(wannabeTable)
   wannabeTableName
}