我对键/值对RDD有疑问 .
我在 C:/download/input
文件夹中有五个文件,其中包含电影中的对话框作为文件内容,如下所示:
movie_horror_Conjuring.txt
movie_comedy_eurotrip.txt
movie_horror_insidious.txt
movie_sci-fi_Interstellar.txt
movie_horror_evildead.txt
我试图使用sc.wholeTextFiles()读取输入文件夹中的文件,其中我得到键/值如下
(C:/download/input/movie_horror_Conjuring.txt,values)
我正在尝试进行一项操作,我必须使用 groupByKey()
将每个类型的输入文件组合在一起 . 所有恐怖电影的 Value 观,喜剧电影在一起等等 .
有没有办法我可以这样生成键/值对 (horror, values)
而不是 (C:/download/input/movie_horror_Conjuring.txt,values)
val ipfile = sc.wholeTextFiles("C:/download/input")
val output = ipfile.groupByKey().map(t => (t._1,t._2))
上面的代码给出了如下输出
(C:/download/input/movie_horror_Conjuring.txt,values)
(C:/download/input/movie_comedy_eurotrip.txt,values)
(C:/download/input/movie_horror_Conjuring.txt,values)
(C:/download/input/movie_sci-fi_Interstellar.txt,values)
(C:/download/input/movie_horror_evildead.txt,values)
我在哪里需要输出如下:
(horror, (values1, values2, values3))
(comedy, (values1))
(sci-fi, (values1))
我还尝试做一些map和split操作来删除键的文件夹路径以仅获取文件名,但是我无法将相应的值附加到文件中 .
另外我想知道如何在values1,values2,values3等中获取行数 .
我的最终输出应该是这样的
(恐怖,100)
其中100是values1 = 40行,values2 = 30行和values3 = 30行等等的行数之和 .
1 回答
试试这个:
如果这对您有用,请告诉我!
Update:
要获得
(horror, 100)
格式的输出: