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?
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
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)