我在Twitter中发布了复杂模式中的推文,我试图从这些推文中提取文本,然后清理数据以进行进一步分析。我正在运行一个SQL查询来提取推文,然后当我尝试使用replaceAll或者替换来清理推文时,它一直在抛出异常
value map不是org.apache.spark.sql.Row
的成员
所以我试图寻找一个解决方案并遇到了这个How to write program in Spark to replace word,它有点类似但与字符串问题有关。我试图用嵌套的地图实现它,但似乎不起作用。
这是我的代码段:
val tweets = sc.textFile(tweetInput).filter(l => l.trim !="")
val tweetTable = sqlContext.jsonRDD(tweets)
tweetTable.registerTempTable("tweetTable")
sqlContext.cacheTable("tweetTable")
// read all tweets from input files
val trimmed_tweets = sqlContext.sql("SELECT text FROM tweetTable WHERE text <> '' ")
.map(x => x.map(_.replace("""([\p{Punct}&&[^.@]]|\b\p{IsLetter}{1,2}\b)\s*""", "")))
.toLowerCase()
.filter(_.nonEmpty)
.flatMap(x=>x)
我也无法使用trimAs_tweets的saveAsTextFile选项,因为saveAsTextFile也不是org.apache.spark.sql.Row的成员
答案 0 :(得分:2)
问题是您的操作是Row
而不是String
。首先,您必须从Row
中提取存储在第一列中的推文文本。
val trimmed_tweets = sqlContext.sql("SELECT text FROM tweetTable WHERE text <> '' ")
.map(row => row.getString(0).replace("""([\p{Punct}&&[^.@]]|\b\p{IsLetter}{1,2}\b)\s*""", "")))
.toLowerCase()
.filter(_.nonEmpty)