4

我已經編寫了使用SparkSQL訪問Hive表的代碼。下面是代碼:如何將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(); 

我想知道我怎麼能完整的輸出轉換爲字符串或字符串數​​組?正如我正在嘗試與另一個模塊,只有我可以傳遞字符串或字符串類型數組值。
我已經嘗試其他方法,如.toString或類型轉換爲字符串值。但沒有爲我工作。
請讓我知道如何將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的lambda參數。請檢查developer.com/java/start-using-java-lambda-expressions.html

+0

請你解釋一下這個'行'在程序中是什麼?你的代碼看起來非常適合我。 –

+0

「row」是java 8的lambda參數。請檢查http://www.developer.com/java/start-using-java-lambda-expressions.html – abaghel

+0

它的完美。謝謝。 –

4

可以使用map功能每一行轉換爲字符串,例如:

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

而不是僅僅mkString當然,你可以做更復雜的工作

collect方法則可以retreive的整個事情到一個數組

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

(這是Scala的語法,我認爲在Java中這是相當SI milar)

+0

它沒有工作,我的朋友。你能用java代替Scala來幫助我嗎?我知道語法有點類似,但是還有其他問題,而我們使用java代替Scala –

+1

@Jaffer Java8語法應該非常相似 –

+0

@ cricket_007謝謝您的建議。它有幫助。 –

相關問題