Scala 数据帧中的映射(Spark2.0)
当我试图在Spark 2.0中通过map迭代DataFrame值时,会出现以下错误 ******错误:找不到数据集中存储的类型的编码器。导入spark.implicits支持基元类型(Int、String等)和产品类型(case类)。在将来的版本中将添加对序列化其他类型的支持。 resDf_upd.map(行=>{****** 代码是Scala 数据帧中的映射(Spark2.0),scala,apache-spark,apache-spark-sql,spark-dataframe,Scala,Apache Spark,Apache Spark Sql,Spark Dataframe,当我试图在Spark 2.0中通过map迭代DataFrame值时,会出现以下错误 ******错误:找不到数据集中存储的类型的编码器。导入spark.implicits支持基元类型(Int、String等)和产品类型(case类)。在将来的版本中将添加对序列化其他类型的支持。 resDf_upd.map(行=>{****** 代码是 import org.apache.spark.SparkContext import org.apache.spark.sql.{SQLContext, Spa
import org.apache.spark.SparkContext
import org.apache.spark.sql.{SQLContext, SparkSession, SaveMode, Row}
import com.typesafe.config.ConfigFactory
import org.apache.spark.sql.catalyst.encoders.ExpressionEncoder
import org.apache.spark.sql.Encoder
object TestProg {
def main(args: Array[String]){
val sc = new SparkContext( "local", "Test Program", "/usr/local/spark", Nil, Map())
val sqlContext = new SQLContext(sc)
val config = ConfigFactory.load("test.conf")
val db1_prop = new java.util.Properties
db1_prop.put("user", config.getString("db1.usr"))
db1_prop.put("password", config.getString("db1.pwd"))
db1_prop.put("driver", config.getString("db1.driver"))
val db1_url = config.getString("db1.url")
val db1_type = "jdbc"
val spark = SparkSession
.builder()
.appName("Session Program")
.config("spark.some.config.option", "some-value")
.getOrCreate()
var empDf = sqlContext.read.format(db1_type).jdbc(db1_url,"employee",db1_prop)
empDf.createOrReplaceTempView("emp")
**val resDf_upd = sqlContext.sql("select * from emp")
resDf_upd.map(row => {
val row1 = row.getAs[String](1)
val make = if (row1.toLowerCase == "Usr3") "User3" else row1
Row(row(0),make,row(2))
}).collect().foreach(println)**
}
}
NetBeans提示:[“没有足够的参数用于方法映射:(隐式证据$7:org.apache.spark.sql.Encoder[org.apache.spark.sql.Row])org.apache.spark.sql.Dataset[org.apache.spark.sql.Row]。
未指定值参数证据$7
找不到存储在数据集中的类型的编码器。导入spark.implicits支持基元类型(Int、String等)和产品类型(case类)。将在将来的版本中添加对序列化其他类型的支持。“]
数据帧类在Spark2.0.0文档中不可用:
数据帧类用于Spark2.0.0示例文档:
看起来
emp
表中有某种类型不受支持-emp
表中所有列的类型是什么?您也可以尝试选择您正在使用的特定列(假设它们的类型正常)代替select*
。看起来emp
表中有一些类型不受支持-emp
表中所有列的类型是什么?您也可以尝试选择正在使用的特定列(假设它们的类型是确定的),而不是select*
。