【发布时间】:2016-04-04 16:24:26
【问题描述】:
我正在 VirtualBox 上学习 Spark。我使用 ./bin/spark-shell 打开 Spark 并使用 Scala。现在我对使用 Scala 的键值格式感到困惑。
我在 home/feng/spark/data 中有一个 txt 文件,看起来像:
panda 0
pink 3
pirate 3
panda 1
pink 4
我使用 sc.textFile 来获取这个 txt 文件。如果我这样做了
val rdd = sc.textFile("/home/feng/spark/data/rdd4.7")
然后我可以使用 rdd.collect() 在屏幕上显示 rdd:
scala> rdd.collect()
res26: Array[String] = Array(panda 0, pink 3, pirate 3, panda 1, pink 4)
但是,如果我这样做了
val rdd = sc.textFile("/home/feng/spark/data/rdd4.7.txt")
这里没有“.txt”。然后我在使用rdd.collect()的时候就报错了:
org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: file:/home/feng/spark/A.txt
at org.apache.hadoop.mapred.FileInputFormat.singleThreadedListStatus(FileInputFormat.java:285)
......
但我看到了其他例子。它们最后都有“.txt”。我的代码或系统有问题吗?
另一件事是当我尝试做的时候:
scala> val rddd = rdd.map(x => (x.split(" ")(0),x))
rddd: org.apache.spark.rdd.RDD[(String, String)] = MapPartitionsRDD[2] at map at <console>:29
scala> rddd.collect()
res0: Array[(String, String)] = Array((panda,panda 0), (pink,pink 3), (pirate,pirate 3), (panda,panda 1), (pink,pink 4))
我打算选择数据的第一列并将其用作键。但是 rddd.collect() 看起来不像那样,因为单词出现了两次,这是不对的。我不能继续做其他的操作,比如 mapbykey、reducebykey 或其他。我哪里做错了?
【问题讨论】:
-
您的问题似乎与您对“.txt”的使用有些不一致。你能检查你的文本——和你的代码插入——以确保它是正确的。如果是这样,那么您的系统似乎真的一团糟。
标签: scala apache-spark rdd