如何将火花行的数据集转换为字符串



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

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或Typecast到字符串值。但对我没有工作。
请让我知道如何将数据集值转换为字符串?

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

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

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

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

然后,collect方法可以将整个物体重新归入数组

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

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

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

 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

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

相关内容

  • 没有找到相关文章

最新更新