web-dev-qa-db-fra.com

Essayer d'utiliser la carte sur un Spark DataFrame

J'ai récemment commencé à expérimenter avec les deux Spark et Java. J'ai d'abord parcouru le fameux WordCountexemple en utilisant RDD et tout s'est déroulé comme prévu. Maintenant, j'essaie de mettre en œuvre mon propre exemple mais en utilisant des DataFrames et non des RDD.

Je lis donc un ensemble de données à partir d'un fichier avec

DataFrame df = sqlContext.read()
        .format("com.databricks.spark.csv")
        .option("inferSchema", "true")
        .option("delimiter", ";")
        .option("header", "true")
        .load(inputFilePath);

puis j'essaie de sélectionner une colonne spécifique et d'appliquer une transformation simple à chaque ligne comme ça

df = df.select("start")
        .map(text -> text + "asd");

Mais la compilation trouve un problème avec la deuxième ligne que je ne comprends pas complètement (la colonne de début est déduite du type string).

Plusieurs méthodes abstraites non prioritaires trouvées dans l'interface scala.Function1

Pourquoi ma fonction lambda est-elle traitée comme une fonction Scala et que signifie réellement le message d'erreur?

6
LetsPlayYahtzee

Si vous utilisez la fonction select sur une trame de données, vous récupérez une trame de données. Ensuite, vous appliquez une fonction sur le Rowdatatype pas la valeur de la ligne. Ensuite, vous devez d'abord obtenir la valeur, vous devez donc procéder comme suit:

df.select("start").map(el->el.getString(0)+"asd")

Mais vous obtiendrez un RDD comme valeur de retour et non un DF

10
jojo_Berlin