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

新手上路,请多包涵

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

 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 值。但没有为我工作。

请告诉我如何将数据集值转换为字符串?

原文由 Jaffer Wilson 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

这是 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);
  }
}

“行”是 java 8 lambda 参数。请检查 developer.com/java/start-using-java-lambda-expressions.html

原文由 abaghel 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

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

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

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

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

(这是 Scala 语法,我认为在 Java 中它非常相似)

原文由 hage 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题