wake-up-neo.com

Wie konvertiere ich die Datensätze von Spark Row in einen String?

Ich habe den Code für den Zugriff auf die Hive-Tabelle mit SparkSQL geschrieben. Hier ist der 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();

Ich möchte wissen, wie ich die gesamte Ausgabe in einen String oder ein String-Array konvertieren kann. Da ich versuche, mit einem anderen Modul zu arbeiten, in dem nur String- oder String-Typ-Array-Werte übergeben werden können.
Ich habe andere Methoden ausprobiert wie .toString oder in String-Werte umwandeln. Hat aber bei mir nicht geklappt.
Bitte lassen Sie mich wissen, wie ich die DataSet-Werte in String konvertieren kann.

7
Jaffer Wilson

Hier ist der Beispielcode in 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" ist Java 8 lambda parameter. Bitte überprüfen Sie developer.com/Java/start-using-Java-lambda-expressions.html

13
abaghel

Sie können die Funktion map verwenden, um jede Zeile in eine Zeichenfolge umzuwandeln, z.

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

Anstelle von nur mkString können Sie natürlich auch anspruchsvollere Arbeiten ausführen

Die collect Methode kann dann das Ganze in ein Array zurückholen

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

(Dies ist die Scala Syntax, denke ich in Java es ist ziemlich ähnlich)

6
hage