web-dev-qa-db-fra.com

Comment convertir les ensembles de données de Spark Row en chaîne?

J'ai écrit le code pour accéder à la table Hive en utilisant SparkSQL. Voici le code:

SparkSession spark = SparkSession
        .builder()
        .appName("Java Spark Hive Example")
        .master("local[*]")
        .config("Hive.metastore.uris", "thrift://localhost:9083")
        .enableHiveSupport()
        .getOrCreate();
Dataset<Row> df =  spark.sql("select survey_response_value from health").toDF();
df.show();

Je voudrais savoir comment convertir la sortie complète en chaîne ou en tableau de chaînes? Comme j'essaye de travailler avec un autre module où seulement je peux passer des valeurs de type String ou String type Array.
J'ai essayé d'autres méthodes comme .toString ou transtypé en valeurs de chaîne. Mais ça n'a pas marché pour moi.
Veuillez me faire savoir comment convertir les valeurs du DataSet en chaîne?

7
Jaffer Wilson

Voici l'exemple de code en Java.

public class SparkSample {
    public static void main(String[] args) {
        SparkSession spark = SparkSession
            .builder()
            .appName("SparkSample")
            .master("local[*]")
            .getOrCreate();
    //create df
    List<String> myList = Arrays.asList("one", "two", "three", "four", "five");
    Dataset<Row> df = spark.createDataset(myList, Encoders.STRING()).toDF();
    df.show();
    //using df.as
    List<String> listOne = df.as(Encoders.STRING()).collectAsList();
    System.out.println(listOne);
    //using df.map
    List<String> listTwo = df.map(row -> row.mkString(), Encoders.STRING()).collectAsList();
    System.out.println(listTwo);
  }
}

"row" est Java 8 paramètre lambda. Veuillez vérifier developer.com/Java/start-using-Java-lambda-expressions.html

13
abaghel

Vous pouvez utiliser la fonction map pour convertir chaque ligne en chaîne, par exemple:

df.map(row => row.mkString())

Au lieu de simplement mkString vous pouvez bien sûr faire un travail plus sophistiqué

La méthode collect peut alors récupérer le tout dans un tableau

val strings = df.map(row => row.mkString()).collect

(Ceci est la syntaxe Scala, je pense que dans Java c'est assez similaire)

6
hage