Yeah, it’s true that this feature doesn’t provide any way to give good error messages. Maybe some IDEs will support it eventually, though I haven’t seen it.
Matei On Nov 7, 2013, at 3:46 PM, Philip Ogren <philip.og...@oracle.com> wrote: > Thanks - I think this would be a helpful note to add to the docs. I went and > read a few things about Scala implicit conversions (I'm obviously new to the > language) and it seems like a very powerful language feature and now that I > know about them it will certainly be easy to identify when they are missing > (i.e. the first thing to suspect when you see a "not a member" compilation > message.) I'm still a bit mystified as to how you would go about finding the > appropriate imports except that I suppose you aren't very likely to use > methods that you don't already know about! Unless you are copying code > verbatim that doesn't have the necessary import statements.... > > > On 11/7/2013 4:05 PM, Matei Zaharia wrote: >> Yeah, this is confusing and unfortunately as far as I know it’s API >> specific. Maybe we should add this to the documentation page for RDD. >> >> The reason for these conversions is to only allow some operations based on >> the underlying data type of the collection. For example, Scala collections >> support sum() as long as they contain numeric types. That’s fine for the >> Scala collection library since its conversions are imported by default, but >> I guess it makes it confusing for third-party apps. >> >> Matei >> >> On Nov 7, 2013, at 1:15 PM, Philip Ogren <philip.og...@oracle.com> wrote: >> >>> I remember running into something very similar when trying to perform a >>> foreach on java.util.List and I fixed it by adding the following import: >>> >>> import scala.collection.JavaConversions._ >>> >>> And my foreach loop magically compiled - presumably due to a another >>> implicit conversion. Now this is the second time I've run into this >>> problem and I didn't recognize it. I'm not sure that I would know what to >>> do the next time I run into this. Do you have some advice on how I should >>> have recognized a missing import that provides implicit conversions and how >>> I would know what to import? This strikes me as code obfuscation. I guess >>> this is more of a Scala question.... >>> >>> Thanks, >>> Philip >>> >>> >>> >>> On 11/7/2013 2:01 PM, Josh Rosen wrote: >>>> The additional methods on RDDs of pairs are defined in a class called >>>> PairRDDFunctions >>>> (https://spark.incubator.apache.org/docs/latest/api/core/index.html#org.apache.spark.rdd.PairRDDFunctions). >>>> SparkContext provides an implicit conversion from RDD[T] to >>>> PairRDDFunctions[T] to make this transparent to users. >>>> >>>> To import those implicit conversions, use >>>> >>>> import org.apache.spark.SparkContext._ >>>> >>>> These conversions are automatically imported by Spark Shell, but you'll >>>> have to import them yourself in standalone programs. >>>> >>>> >>>> On Thu, Nov 7, 2013 at 11:54 AM, Philip Ogren <philip.og...@oracle.com> >>>> wrote: >>>> On the front page of the Spark website there is the following simple word >>>> count implementation: >>>> >>>> file = spark.textFile("hdfs://...") >>>> file.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey(_ >>>> + _) >>>> >>>> The same code can be found in the Quick Start quide. When I follow the >>>> steps in my spark-shell (version 0.8.0) it works fine. The reduceByKey >>>> method is also shown in the list of transformations in the Spark >>>> Programming Guide. The bottom of this list directs the reader to the API >>>> docs for the class RDD (this link is broken, BTW). The API docs for RDD >>>> does not list a reduceByKey method for RDD. Also, when I try to compile >>>> the above code in a Scala class definition I get the following compile >>>> error: >>>> >>>> value reduceByKey is not a member of >>>> org.apache.spark.rdd.RDD[(java.lang.String, Int)] >>>> >>>> I am compiling with maven using the following dependency definition: >>>> >>>> <dependency> >>>> <groupId>org.apache.spark</groupId> >>>> <artifactId>spark-core_2.9.3</artifactId> >>>> <version>0.8.0-incubating</version> >>>> </dependency> >>>> >>>> Can someone help me understand why this code works fine from the >>>> spark-shell but doesn't seem to exist in the API docs and won't compile? >>>> >>>> Thanks, >>>> Philip >>>> >>> >> >