単純な1行を作成するSpark DataFrame with Java API
Scalaでは、次のようにメモリ内の文字列から単一行のDataFrameを作成できます。
_val stringAsList = List("buzz")
val df = sqlContext.sparkContext.parallelize(jsonValues).toDF("fizz")
df.show()
_
df.show()
が実行されると、次のように出力されます。
_+-----+
| fizz|
+-----+
| buzz|
+-----+
_
今、これをJavaクラスの内部から実行しようとしています。どうやらJavaRDD
sには、 toDF(String)
メソッド。私はもう試した:
_List<String> stringAsList = new ArrayList<String>();
stringAsList.add("buzz");
SQLContext sqlContext = new SQLContext(sparkContext);
DataFrame df = sqlContext.createDataFrame(sparkContext
.parallelize(stringAsList), StringType);
df.show();
_
...しかし、まだ足りないようです。 df.show();
を実行すると、次のようになります。
_++
||
++
||
++
_
(空のDFです。)だから私は尋ねます:Java APIを使用して、メモリ内の文字列を1行のみのDataFrameに読み込む方法そして、その中に1つの列とその列の名前を指定しますか?(つまり、df.show()
はScala上記の1つ)?
これを行うには、RddにListを作成し、列名を含むスキーマを作成します。
他の方法もあるかもしれませんが、それはそれらの1つにすぎません。
List<String> stringAsList = new ArrayList<String>();
stringAsList.add("buzz");
JavaRDD<Row> rowRDD = sparkContext.parallelize(stringAsList).map((String row) -> {
return RowFactory.create(row);
});
StructType schema = DataTypes.createStructType(new StructField[] { DataTypes.createStructField("fizz", DataTypes.StringType, false) });
DataFrame df = sqlContext.createDataFrame(rowRDD, schema).toDF();
df.show();
//+----+
|fizz|
+----+
|buzz|
アップグレードが必要な場合は、Spark 2の例を2つ作成しました。
シンプルなフィズ/バズ(または敵/バー-旧世代:)):
SparkSession spark = SparkSession.builder().appName("Build a DataFrame from Scratch").master("local[*]")
.getOrCreate();
List<String> stringAsList = new ArrayList<>();
stringAsList.add("bar");
JavaSparkContext sparkContext = new JavaSparkContext(spark.sparkContext());
JavaRDD<Row> rowRDD = sparkContext.parallelize(stringAsList).map((String row) -> RowFactory.create(row));
// Creates schema
StructType schema = DataTypes.createStructType(
new StructField[] { DataTypes.createStructField("foe", DataTypes.StringType, false) });
Dataset<Row> df = spark.sqlContext().createDataFrame(rowRDD, schema).toDF();
2x2データ:
SparkSession spark = SparkSession.builder().appName("Build a DataFrame from Scratch").master("local[*]")
.getOrCreate();
List<String[]> stringAsList = new ArrayList<>();
stringAsList.add(new String[] { "bar1.1", "bar2.1" });
stringAsList.add(new String[] { "bar1.2", "bar2.2" });
JavaSparkContext sparkContext = new JavaSparkContext(spark.sparkContext());
JavaRDD<Row> rowRDD = sparkContext.parallelize(stringAsList).map((String[] row) -> RowFactory.create(row));
// Creates schema
StructType schema = DataTypes
.createStructType(new StructField[] { DataTypes.createStructField("foe1", DataTypes.StringType, false),
DataTypes.createStructField("foe2", DataTypes.StringType, false) });
Dataset<Row> df = spark.sqlContext().createDataFrame(rowRDD, schema).toDF();
コードは次からダウンロードできます: https://github.com/jgperrin/net.jgp.labs.spark 。