Skip to content
Snippets Groups Projects
Commit 362539f8 authored by Holden Karau's avatar Holden Karau Committed by Xiangrui Meng
Browse files

[SPARK-10630] [SQL] Add a createDataFrame API that takes in a java list

It would be nice to support creating a DataFrame directly from a Java List of Row.

Author: Holden Karau <holden@pigscanfly.ca>

Closes #8779 from holdenk/SPARK-10630-create-DataFrame-from-Java-List.
parent 97a99dde
No related branches found
No related tags found
No related merge requests found
...@@ -476,6 +476,20 @@ class SQLContext(@transient val sparkContext: SparkContext) ...@@ -476,6 +476,20 @@ class SQLContext(@transient val sparkContext: SparkContext)
createDataFrame(rowRDD.rdd, schema) createDataFrame(rowRDD.rdd, schema)
} }
/**
* :: DeveloperApi ::
* Creates a [[DataFrame]] from an [[java.util.List]] containing [[Row]]s using the given schema.
* It is important to make sure that the structure of every [[Row]] of the provided List matches
* the provided schema. Otherwise, there will be runtime exception.
*
* @group dataframes
* @since 1.6.0
*/
@DeveloperApi
def createDataFrame(rows: java.util.List[Row], schema: StructType): DataFrame = {
DataFrame(self, LocalRelation.fromExternalRows(schema.toAttributes, rows.asScala))
}
/** /**
* Applies a schema to an RDD of Java Beans. * Applies a schema to an RDD of Java Beans.
* *
......
...@@ -37,6 +37,7 @@ import org.apache.spark.sql.*; ...@@ -37,6 +37,7 @@ import org.apache.spark.sql.*;
import static org.apache.spark.sql.functions.*; import static org.apache.spark.sql.functions.*;
import org.apache.spark.sql.test.TestSQLContext; import org.apache.spark.sql.test.TestSQLContext;
import org.apache.spark.sql.types.*; import org.apache.spark.sql.types.*;
import static org.apache.spark.sql.types.DataTypes.*;
public class JavaDataFrameSuite { public class JavaDataFrameSuite {
private transient JavaSparkContext jsc; private transient JavaSparkContext jsc;
...@@ -181,6 +182,15 @@ public class JavaDataFrameSuite { ...@@ -181,6 +182,15 @@ public class JavaDataFrameSuite {
} }
} }
@Test
public void testCreateDataFromFromList() {
StructType schema = createStructType(Arrays.asList(createStructField("i", IntegerType, true)));
List<Row> rows = Arrays.asList(RowFactory.create(0));
DataFrame df = context.createDataFrame(rows, schema);
Row[] result = df.collect();
Assert.assertEquals(1, result.length);
}
private static final Comparator<Row> crosstabRowComparator = new Comparator<Row>() { private static final Comparator<Row> crosstabRowComparator = new Comparator<Row>() {
@Override @Override
public int compare(Row row1, Row row2) { public int compare(Row row1, Row row2) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment