Spark Scala:另存为csv文件(RDD)

Spark Scala:另存为csv文件(RDD),scala,csv,apache-spark,Scala,Csv,Apache Spark,我曾尝试使用ApacheSpark来流式传输twitter数据,我想将流式传输的数据保存为csv文件,但我做不到 如何修复代码以使其进入csv 我使用RDD 这是我的主要代码: val ssc = new StreamingContext(conf, Seconds(3600)) val stream = TwitterUtils.createStream(ssc, None, filters) val tweets = stream.map(t => { Map( // T

我曾尝试使用ApacheSpark来流式传输twitter数据,我想将流式传输的数据保存为csv文件,但我做不到 如何修复代码以使其进入csv

我使用RDD

这是我的主要代码:

val ssc = new StreamingContext(conf, Seconds(3600))
val stream = TwitterUtils.createStream(ssc, None, filters)

val tweets = stream.map(t => {
  Map(
    // This is for tweet
    "text" -> t.getText,
    "retweet_count" -> t.getRetweetCount,
    "favorited" -> t.isFavorited,
    "truncated" -> t.isTruncated,
    "id_str" -> t.getId,
    "in_reply_to_screen_name" -> t.getInReplyToScreenName,
    "source" -> t.getSource,
    "retweeted" -> t.isRetweetedByMe,
    "created_at" -> t.getCreatedAt,
    "in_reply_to_status_id_str" -> t.getInReplyToStatusId,
    "in_reply_to_user_id_str" -> t.getInReplyToUserId,

    // This is for tweet's user
    "listed_count" -> t.getUser.getListedCount,
    "verified" -> t.getUser.isVerified,
    "location" -> t.getUser.getLocation,
    "user_id_str" -> t.getUser.getId,
    "description" -> t.getUser.getDescription,
    "geo_enabled" -> t.getUser.isGeoEnabled,
    "user_created_at" -> t.getUser.getCreatedAt,
    "statuses_count" -> t.getUser.getStatusesCount,
    "followers_count" -> t.getUser.getFollowersCount,
    "favorites_count" -> t.getUser.getFavouritesCount,
    "protected" -> t.getUser.isProtected,
    "user_url" -> t.getUser.getURL,
    "name" -> t.getUser.getName,
    "time_zone" -> t.getUser.getTimeZone,
    "user_lang" -> t.getUser.getLang,
    "utc_offset" -> t.getUser.getUtcOffset,
    "friends_count" -> t.getUser.getFriendsCount,
    "screen_name" -> t.getUser.getScreenName
  )
})

tweets.repartition(1).saveAsTextFiles("~/streaming/tweets")

您需要将RDD[Map[String,String]]格式的tweet转换为数据帧以另存为CSV。原因是简单RDD没有模式。而csv格式有一个特定的模式。因此,您必须将RDD转换为具有模式的数据帧

有几种方法可以做到这一点。一种方法是使用case类,而不是将数据放入映射中

 case class(text:String, retweetCount:Int ...)
现在,使用适当的参数实例化case类,而不是Map(…)

最后,使用spark隐式转换将tweet转换为数据帧

import spark.implicits._
tweets.toDF.write.csv(...) // saves as CSV

或者,您可以使用给定的解决方案将地图转换为数据帧

您需要将RDD[Map[String,String]]推文转换为数据帧以另存为CSV。原因是简单RDD没有模式。而csv格式有一个特定的模式。因此,您必须将RDD转换为具有模式的数据帧

有几种方法可以做到这一点。一种方法是使用case类,而不是将数据放入映射中

 case class(text:String, retweetCount:Int ...)
现在,使用适当的参数实例化case类,而不是Map(…)

最后,使用spark隐式转换将tweet转换为数据帧

import spark.implicits._
tweets.toDF.write.csv(...) // saves as CSV

或者,您可以使用给定的解决方案将地图转换为数据帧

您是否有RDD或数据集/帧。如果是后者,则有一种写入方法将CSV作为格式option@cricket_007这是一个RDD@user8371915不,我使用的是RDD而不是DFD。您是否有RDD或数据集/帧。如果是后者,则有一种写入方法将CSV作为格式option@cricket_007这是一个RDD@user8371915不,我使用的是RDD而不是DFT这些在tweet映射内或之后的更改?我尝试使用这种方法将映射转换为数据帧它可以工作,但如何分配twitter信息(getText、getRetweetCount等等)?它最终可以工作,感谢我们这些在tweet映射内或之后的更改?我尝试过使用这种方法将映射转换为数据帧它可以工作,但如何分配twitter信息(getText、getRetweetCount等等)?最后,感谢你