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谢谢您的建议。它有帮助。 –

相关问题