在spark中创建数据帧时出错

时间:2017-09-27 07:01:06

标签: scala apache-spark spark-dataframe spark-streaming

我正在尝试在kafka-spark流中创建一个数据帧,我已成功将值映射到case类,但每当我调用toDF方法时它都会给我错误。  **

  

值toDF不是Array [WeatherEvent] [error]的成员   原因:可能在“值toDF”之前缺少分号? [错误]
  }。toDF(“经度”,“纬度”,“国家”,“日出”,“夕阳”,   “温度”,“温度最小”,“温度最大”,[错误] ^   [错误]发现一个错误[错误](编译:compileIncremental)   编译失败[错误]总时间:2秒,完成于2017年9月27日   上午11:49:23

这是我的代码

 val inputStream = KafkaUtils.createDirectStream(ssc, PreferConsistent, Subscribe[String, String ](Array("test"), kafkaParams))
 //  val json = parse(inputStream)


  val processedStream = inputStream
  .flatMap(record => record.value.split(" ").map(payload => {
        //val ts = Timestamp.valueOf(payload(3))
        WeatherEvent(payload(0).toDouble, payload(1).toDouble, payload(2).toString , payload(3).toInt,
                    payload(4).toInt, payload(5).toDouble, payload(6).toDouble, payload(7).toDouble, 
                    payload(8).toDouble, payload(9).toInt, payload(10).toInt, payload(11).toInt, 
                    payload(12).toDouble, payload(13).toDouble)
      }).toDF("longitude", "latitude", "country", "sunrise", "sunset", "temperature", "temperatureMin", "temperatureMax", 
              "pressure", "humidity", "cloudiness", "id", "wind_speed", "wind_deg")
 )

谢谢**

1 个答案:

答案 0 :(得分:2)

toDF()是sqlContext中定义的隐式方法。 toDF()用于将RDD转换为Dataframe。在这里你得到一个来自Kafka的流,我的意思是Dstreams。要将其转换为DF,您需要使用转换 API或 foreachRDD API处理Dstream中的每个RDD。下面我使用foreachRDD转换将RDD转换为Dataframe

val data=KafkaUtils.createStream(ssc, zkQuorum, "GroupName", topics).map(x=>x._2)
val lines12=data.foreachRDD(x=>{
  val df=x.flatMap(x => x.split(",")).map(x=>(x(0),x(1))).toDF()
}