Question: In Spark SQL when I tried to use map function on DataFrame then I am getting below error. 

The method map(Function1, ClassTag) in the type DataFrame is not applicable for the arguments (new Function(){})

I am following spark 1.3 documentation as well. <https://spark.apache.org/docs/latest/sql-programming-guide.html#inferring-the-schema-using-reflection> Have any one solution?

Here is my testing code.

```
   // SQL can be run over RDDs that have been registered as tables.
DataFrame teenagers = sqlContext.sql("SELECT name FROM people WHERE age >= 13 AND age <= 19");

List<String> teenagerNames = teenagers.map(
            new Function<Row, String>() {
          public String call(Row row) {
            return "Name: " + row.getString(0);
          }
        }).collect();

```

Answer: 
Change this to:

*Java 6 & 7*

```
List<String> teenagerNames = teenagers.javaRDD().map(
    new Function<Row, String>() {
    public String call(Row row) {
        return "Name: " + row.getString(0);
    }
}).collect();

```

*Java 8*

```
List<String> t2 = teenagers.javaRDD().map(
    row -> "Name: " + row.getString(0)
).collect();

```

Once you call javaRDD() it works just like any other RDD map function.

This works with Spark 1.3.0 and up.
No need to convert to RDD, its delays the execution it can be done as below

`public static void mapMethod() {
 // Read the data from file, where the file is in the classpath.
 Dataset df = sparkSession.read().json("file1.json");

```
// Prior to java 1.8 
Encoder<String> encoder = Encoders.STRING();
    List<String> rowsList = df.map((new MapFunction<Row, String>() {
        private static final long serialVersionUID = 1L;

        @Override
        public String call(Row row) throws Exception {
            return "string:>" + row.getString(0).toString() + "<";
        }
    }), encoder).collectAsList();

// from java 1.8 onwards
List<String> rowsList1 = df.map((row -> "string >" + row.getString(0) + "<" ), encoder).collectAsList();
System.out.println(">>> " + rowsList);
System.out.println(">>> " + rowsList1);

```

}`