4

Я написал код для доступа к таблице Hive, используя SparkSQL. Вот код:Как преобразовать данные набора Spark Row в строку?

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(); 

Я хотел бы знать, как я могу преобразовать полный вывод в массив String или String? Поскольку я пытаюсь работать с другим модулем, где только я могу передать значения String или String типа Array.
Я пробовал другие методы, такие как .toString или typecast для значений String. Но не работал для меня.
Пожалуйста, дайте мне знать, как я могу преобразовать значения DataSet в String?

ответ

6

Вот пример кода на 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" - java 8 параметр лямбда. Пожалуйста, проверьте developer.com/java/start-using-java-lambda-expressions.html

+0

Не могли бы вы объяснить мне, что это за «строка» в программе? Вы код выглядит довольно оптимизирован для меня. –

+0

«строка» - это параметр java 8 лямбда. Пожалуйста, проверьте http://www.developer.com/java/start-using-java-lambda-expressions.html – abaghel

+0

Его идеальный вариант. Благодарю. –

4

Вы можете использовать функцию map преобразовать каждую строку в строку, например:

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

Вместо того, чтобы просто mkString вы, конечно, можете сделать более сложные работы

Метод collect затем может извлечь все это в массив

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

(Это синтаксис Scala, я думаю, что на Java это довольно си milar)

+0

Это не сработало, мой друг. Можете ли вы помочь мне с java, а не с Scala. Я знаю, что синтаксис немного похож, но есть и другие проблемы, в то время как мы используем Java вместо Scala. –

+1

@ Jaffer Java8 синтаксис должен быть очень похож –

+0

@ cricket_007 Спасибо за советы. Это помогло. –