请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

RDD与Dataframe相互转化的课时一按照老师给的代码在IDE里面run会报如下错误,该怎么处理?如果打包放在机器上运行就不会报错

 Caused by: java.lang.ClassCastException: cannot assign instance of scala.collection.immutable.List$SerializationProxy to field org.apache.spark.rdd.RDD


正在回答 回答被采纳积分+3

3回答

Michael_PK 2017-08-29 21:01:59

你仔细对比和上课的代码一致吗?肯定不是,自己仔细对比下!

0 回复 有任何疑惑可以回复我~
  • 提问者 人唯优2018 #1
    代码逻辑是完全一样的,不同的是我是指定master地址为spark://master:7077,用local模式就不会报rdd的错误,但是我不清楚为什么,因为我在其他程序里面写spark://master:7077就不会报该错误
    回复 有任何疑惑可以回复我~ 2017-08-29 21:13:21
  • Michael_PK 回复 提问者 人唯优2018 #2
    问题就出在这,你去了解下spark的运行架构,本地是不支持指定standalone模式运行的
    回复 有任何疑惑可以回复我~ 2017-08-29 21:18:17
提问者 人唯优2018 2017-08-29 20:44:41

package com.immoc.spark

import org.apache.spark.rdd.RDD

import org.apache.spark.sql.types.{IntegerType, StringType, StructField, StructType}

import org.apache.spark.sql.{Row, SparkSession, types}

/**

  * DataFrame与RDD的互操作

  */

object DataFrameRDDApp {

  def main(args: Array[String]): Unit = {

    val spark = SparkSession.builder().appName("DataFrameRDDApp").master("spark://master:7077").getOrCreate()


    //inferReflection(spark)

    

    program(spark)


    spark.stop()

  }

  private def program (spark: SparkSession) = {

    val rdd = spark.sparkContext.textFile("file:///usr/local/app/spark/examples/src/main/resources/info.txt")

    val infoRDD = rdd.map(_.split(",")).map(line => Row(line(0).toInt, line(1), line(2).toInt))

    val structType = StructType(Array(StructField("id",IntegerType, true),

      StructField("name",StringType, true),

      StructField("age",IntegerType, true)

    ))

    val infoDF = spark.createDataFrame(infoRDD,structType)

    infoDF.printSchema()

    infoDF.show()


    //通过df的api进行操作

    infoDF.filter(infoDF.col("age") > 30).show


    //通过sql的方式进行操作

    infoDF.createOrReplaceTempView("infos")

    spark.sql("select * from infos where age > 30").show()

  }

  private def inferReflection(spark: SparkSession) = {

    //RDD ===> DataFrame

    val rdd = spark.sparkContext.textFile("file:///usr/local/app/spark/examples/src/main/resources/info.txt")

    //需要导入隐式转换

    import spark.implicits._

    val infoDF = rdd.map(_.split(",")).map(line => Info(line(0).toInt, line(1), line(2).toInt)).toDF()


    infoDF.show()

  }


  case class Info(id:Int, name:String, age:Int)


}


0 回复 有任何疑惑可以回复我~
Michael_PK 2017-08-28 12:13:56

贴上你的代码

0 回复 有任何疑惑可以回复我~
  • 提问者 人唯优2018 #1
    已贴上,就是按照教程的代码
    回复 有任何疑惑可以回复我~ 2017-08-29 20:45:17
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信