在scala中动态创建数据帧

时间:2016-02-25 04:53:38

标签: scala apache-spark

我是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

请帮助我,建议我是否可以做得更好

1 个答案:

答案 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