Dataframe 在映射后转换为 Option[DataFrame]
Dataframe converting to Option[DataFrame] after it's mapped
我正在尝试创建一个将 table 名称映射到数据帧的函数,我的代码是:
def tableGen(tables: Array[Any], df: DataFrame, sqlContext: SQLContext): Map[String,DataFrame]={
df.registerTempTable("TempTable")
var myMap: Map[String,DataFrame] = Map()
for(i <- tables){
val queryRows = sqlContext.sql(s"SELECT * FROM TempTable WHERE table = '$i'")
queryRows.cache()
myMap += (i.toString -> queryRows.toDF())
}
for((k,v) <- myMap){
printf("Key: %s , Value: %s\n",k,v)
}
myMap
}
虽然我明确声明我希望我的 return 类型是 Map[String,DataFrame] 当我走出函数并执行这些操作时:
val test: DataFrame = TableMap.get("Company")
test.show()
我收到类型不匹配错误:
Error:(41, 39) type mismatch;
found : Option[org.apache.spark.sql.DataFrame]
required: org.apache.spark.sql.DataFrame
val test: DataFrame = TableMap.get("Company")
我什至不知道 Option[org.apache.spark.sql.DataFrame] 是什么,我也不知道它为什么会转换。
Although I explicitly state I want my return type to be Map[String,DataFrame] when I go outside of the function and do these:
下面我link这些类的文档。
Map[String,DataFrame]#get(String)
returns an Option[DataFrame]
. An Option[T]
是一种类型,可以包含两个值Some[T]
或None
之一,None表示没有值。
你可以做
TableMap.get("Company") map { test.show() }
要正确处理Option或者你只是
val test: DataFrame = TableMap("Company")
test.show()
绕过选项 (Map#apply method)。不推荐第二个,因为它只会抛出异常。
基于某个类别列,创建基于该列的地图。在这种情况下,类别列是 table
.
val categoryCol = col("table")
// category can be type String, Int, ...
val categories = df.select(categoryCol).distinct.collect.map(row => row.get(0))
// result is Map[String, DataFrame]
val dfs = categories.map {
category =>
(category.toString, df.filter(categoryCol === category).cache)
}
.toMap
val companyDF = dfs("Company")
我正在尝试创建一个将 table 名称映射到数据帧的函数,我的代码是:
def tableGen(tables: Array[Any], df: DataFrame, sqlContext: SQLContext): Map[String,DataFrame]={
df.registerTempTable("TempTable")
var myMap: Map[String,DataFrame] = Map()
for(i <- tables){
val queryRows = sqlContext.sql(s"SELECT * FROM TempTable WHERE table = '$i'")
queryRows.cache()
myMap += (i.toString -> queryRows.toDF())
}
for((k,v) <- myMap){
printf("Key: %s , Value: %s\n",k,v)
}
myMap
}
虽然我明确声明我希望我的 return 类型是 Map[String,DataFrame] 当我走出函数并执行这些操作时:
val test: DataFrame = TableMap.get("Company")
test.show()
我收到类型不匹配错误:
Error:(41, 39) type mismatch;
found : Option[org.apache.spark.sql.DataFrame]
required: org.apache.spark.sql.DataFrame
val test: DataFrame = TableMap.get("Company")
我什至不知道 Option[org.apache.spark.sql.DataFrame] 是什么,我也不知道它为什么会转换。
Although I explicitly state I want my return type to be Map[String,DataFrame] when I go outside of the function and do these:
下面我link这些类的文档。
Map[String,DataFrame]#get(String)
returns an Option[DataFrame]
. An Option[T]
是一种类型,可以包含两个值Some[T]
或None
之一,None表示没有值。
你可以做
TableMap.get("Company") map { test.show() }
要正确处理Option或者你只是
val test: DataFrame = TableMap("Company")
test.show()
绕过选项 (Map#apply method)。不推荐第二个,因为它只会抛出异常。
基于某个类别列,创建基于该列的地图。在这种情况下,类别列是 table
.
val categoryCol = col("table")
// category can be type String, Int, ...
val categories = df.select(categoryCol).distinct.collect.map(row => row.get(0))
// result is Map[String, DataFrame]
val dfs = categories.map {
category =>
(category.toString, df.filter(categoryCol === category).cache)
}
.toMap
val companyDF = dfs("Company")