Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 数据帧中的映射(Spark2.0)_Scala_Apache Spark_Apache Spark Sql_Spark Dataframe - Fatal编程技术网

Scala 数据帧中的映射(Spark2.0)

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

当我试图在Spark 2.0中通过map迭代DataFrame值时,会出现以下错误

******错误:找不到数据集中存储的类型的编码器。导入spark.implicits支持基元类型(Int、String等)和产品类型(case类)。在将来的版本中将添加对序列化其他类型的支持。 resDf_upd.map(行=>{******

代码是

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*