如何将 Spark Row 的数据集转换成字符串?

How to convert the datasets of Spark Row into string?

我已经编写了使用 SparkSQL 访问 Hive table 的代码。这是代码:

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 类型的数组值。
我尝试了其他方法,例如 .toString 或类型转换为 String 值。但对我没用。
请告诉我如何将数据集值转换为字符串?

您可以使用 map 函数将每一行转换为字符串,例如:

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

不只是mkString你当然可以做更复杂的工作

然后 collect 方法可以将整个事物检索到一个数组中

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

(这是Scala的语法,我觉得Java很像)

这是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

如果您打算逐行读取数据集,则可以在数据集上使用迭代器:

 Dataset<Row>csv=session.read().format("csv").option("sep",",").option("inferSchema",true).option("escape, "\"").option("header", true).option("multiline",true).load(users/abc/....);

for(Iterator<Row> iter = csv.toLocalIterator(); iter.hasNext();) {
    String item = (iter.next()).toString();
    System.out.println(item.toString());    
}

作为单个字符串,从 sparkSession 你可以这样做:

sparkSession.read.textFile(filePath).collect.mkString

假设您的数据集是字符串类型:Dataset[String]