web-dev-qa-db-ja.com

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();

完全な出力を文字列または文字列配列に変換する方法を知りたいですか?文字列または文字列型の配列値のみを渡すことができる別のモジュールで作業しようとしているので。
.toStringまたは文字列値に型キャストします。しかし、私のために働いていませんでした。
DataSetの値をStringに変換する方法を教えてください。

7
Jaffer Wilson

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ラムダパラメータ。確認してください developer.com/Java/start-using-Java-lambda-expressions.html

13
abaghel

map 関数を使用して、すべての行を文字列に変換できます。例:

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

mkString の代わりに、もちろんより洗練された作業を行うことができます

collect メソッドは、全体を配列に取得できます

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

(これはScala構文です、私はJavaそれはかなり似ていると思います)

6
hage