Comment est-ce que je convertis cette ligne en un dataframe?
val oneRowDF = myDF.first // gives Array[Row]
Merci
Dans ma réponse, df1 est un DataFrame [texte: chaîne, y: int], juste pour tester - val df1 = sc.parallelize(List("a", 1")).toDF("text", "y")
.
val schema = StructType(
StructField("text", StringType, false) ::
StructField("y", IntegerType, false) :: Nil)
val arr = df1.head(3); // Array[Row]
val dfFromArray = sqlContext.createDataFrame(sparkContext.parallelize(arr), schema);
Vous pouvez également mapper un tableau parallélisé et lancer chaque ligne:
val dfFromArray = sparkContext.parallelize(arr).map(row => (row.getString(0), row.getInt(1)))
.toDF("text", "y");
Dans le cas d'une ligne, vous pouvez exécuter:
val dfFromArray = sparkContext.parallelize(Seq(row)).map(row => (row.getString(0), row.getInt(1)))
.toDF("text", "y");
Dans Spark 2.0, utilisez SparkSession au lieu de SQLContext.
Vous ne voulez pas faire ça:
Si vous voulez une sous-partie de la totalité du dataFrame, utilisez simplement limit
api.
Exemple:
scala> val d=sc.parallelize(Seq((1,3),(2,4))).toDF
d: org.Apache.spark.sql.DataFrame = [_1: int, _2: int]
scala> d.show
+---+---+
| _1| _2|
+---+---+
| 1| 3|
| 2| 4|
+---+---+
scala> d.limit(1)
res1: org.Apache.spark.sql.Dataset[org.Apache.spark.sql.Row] = [_1: int, _2: int]
scala> d.limit(1).show
+---+---+
| _1| _2|
+---+---+
| 1| 3|
+---+---+
Néanmoins, si vous voulez convertir explicitement un Array [Row] en DataFrame, vous pouvez faire quelque chose comme:
scala> val value=d.take(1)
value: Array[org.Apache.spark.sql.Row] = Array([1,3])
scala> val asTuple=value.map(a=>(a.getInt(0),a.getInt(1)))
asTuple: Array[(Int, Int)] = Array((1,3))
scala> sc.parallelize(asTuple).toDF
res6: org.Apache.spark.sql.DataFrame = [_1: int, _2: int]
Et donc maintenant vous pouvez le montrer en conséquence!
Jetez un coup d'œil à les scaladocs - Je recommanderais RDD[Row]
ici, ce qui signifie que vous devez vous y rendre. Devrait être plus facile avec makeRDD . Vous aurez également besoin d'un schéma correspondant à votre Row
, que vous pouvez en extraire directement .
... comment avez-vous obtenu Array[Row]
en premier lieu?
Si vous avez List<Row>
, vous pouvez directement l'utiliser pour créer une dataframe
ou dataset<Row>
à l'aide de spark.createDataFrame(List<Row> rows, StructType schema)
. Où spark est SparkSession dans spark 2.x