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
Apache spark 过滤RDD计算数据集_Apache Spark_Filter_Rdd_Flatmap - Fatal编程技术网

Apache spark 过滤RDD计算数据集

Apache spark 过滤RDD计算数据集,apache-spark,filter,rdd,flatmap,Apache Spark,Filter,Rdd,Flatmap,我在用ApacheSpark练习,我试着做一些计算。虽然,我能够达到我想要的结果,但我必须尝试两种不同的方法才能奏效 我有一个现有的数据集,我从中创建了RDD RT@NigeriaNewsdesk:Chibok女学生通过@todayng交换了5名博科圣地指挥官 我想过滤并获取以@开头的单词,因此我从现有数据集创建了一个RDD usernameFile = sc.parallelize(tweets) username = usernameFile.flatMap(lambda line: lin

我在用ApacheSpark练习,我试着做一些计算。虽然,我能够达到我想要的结果,但我必须尝试两种不同的方法才能奏效

我有一个现有的数据集,我从中创建了RDD

RT@NigeriaNewsdesk:Chibok女学生通过@todayng交换了5名博科圣地指挥官

我想过滤并获取以@开头的单词,因此我从现有数据集创建了一个RDD

usernameFile = sc.parallelize(tweets)
username = usernameFile.flatMap(lambda line: line.split()).filter(lambda x: x.startswith('@')).collect()
print(username)
我有这样的东西

[u'R', u'T', u' ', u'@', u'N', u'i', u'g', u'e', u'r', u'i', u'a', u'N', u'e', u'w', u's', u'd', u'e', u's', u'k', u':', u' ', u'C', u'h', u'i', u'b', u'o', u'k', u' ', u's', u'c', u'h', u'o', u'o', u'l', u'g', u'i', u'r', u'l', u's', u' ', u'w', u'e', u'r', u'e', u' ', u's', u'w', u'a', u'p', u'p', u'e', u'd', u' ', u'f'
tweets = tweets.split(" ")
usernameFile = sc.parallelize(tweets)
username = usernameFile.flatMap(lambda line: line.split()).filter(lambda x: x.startswith('@')).collect()
print(username)
print("username done")
我也会附上它 在第二次尝试中,我做了类似的事情

[u'R', u'T', u' ', u'@', u'N', u'i', u'g', u'e', u'r', u'i', u'a', u'N', u'e', u'w', u's', u'd', u'e', u's', u'k', u':', u' ', u'C', u'h', u'i', u'b', u'o', u'k', u' ', u's', u'c', u'h', u'o', u'o', u'l', u'g', u'i', u'r', u'l', u's', u' ', u'w', u'e', u'r', u'e', u' ', u's', u'w', u'a', u'p', u'p', u'e', u'd', u' ', u'f'
tweets = tweets.split(" ")
usernameFile = sc.parallelize(tweets)
username = usernameFile.flatMap(lambda line: line.split()).filter(lambda x: x.startswith('@')).collect()
print(username)
print("username done")
第二次尝试效果非常好,但我的问题是,为什么在并行化数据集之前必须拆分它

我能不先做同样的事情吗

tweets = tweets.split(" ")

谢谢。

直接映射如下:

import re

tweets = sc.parallelize([
    "RT @foo abc @bar"
])

tweets.flatMap(lambda s: re.findall("@\w+", s))
再简单不过了: