我是scala和spark的新手。我需要通过读取文件动态创建数据帧。文件的每一行都是一个查询。最后加入所有数据帧并将结果存储在一个文件中。
我在下面写了基本代码,无法动态创建数据帧。
import org.apache.spark.sql.SQLContext._
import org.apache.spark.sql.SQLConf
import scala.io.Source
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
val empFile = "/user/sri/sample2.txt"
sqlContext.load("com.databricks.spark.csv", Map("path" -> empFile, "header" -> "true")).registerTempTable("emp")
var cnt=0;
val filename ="emp.sql"
for (line <- Source.fromFile(filename).getLines)
{
println(line)
cnt += 1
//var dis: String = "emp"+cnt
val "emp"+cnt = sqlContext.sql("SELECT \"totalcount\", count(*) FROM emp")
println(dis)
//val dis = sqlContext.sql("SELECT \"totalcount\", count(*) FROM emp")
}
println(cnt)
exit
请帮助我,建议我是否可以做得更好
答案 0 :(得分:0)
你得到什么错误?考虑到这一行,我假设您的代码无法编译:
val“emp”+ cnt = sqlContext.sql(“SELECT \”totalcount \“,count(*)FROM emp”)
在Scala中,以编程方式定义某些构造(val "emp"+cnt
)的名称并不容易。
在您的情况下,您可以使用集合来保存结果。
val queries = for (line <- Source.fromFile(filename).getLines) yield {
sqlContext.sql("SELECT \"totalcount\", count(*) FROM emp")
}
val cnt = queries.length