如何将数组[行]转换为DataFrame

Gar*_*aso 7 scala dataframe apache-spark

如何将这一行转换为数据帧?

val oneRowDF = myDF.first // gives Array[Row]
Run Code Online (Sandbox Code Playgroud)

谢谢

T. *_*ęda 10

在我的回答中,df1是一个DataFrame [text:string,y:int],仅用于测试 - 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);
Run Code Online (Sandbox Code Playgroud)

您还可以映射并行化数组并转换每一行:

val dfFromArray = sparkContext.parallelize(arr).map(row => (row.getString(0), row.getInt(1)))
    .toDF("text", "y");
Run Code Online (Sandbox Code Playgroud)

如果是一行,您可以运行:

val dfFromArray = sparkContext.parallelize(Seq(row)).map(row => (row.getString(0), row.getInt(1)))
    .toDF("text", "y");
Run Code Online (Sandbox Code Playgroud)

在Spark 2.0中使用SparkSession而不是SQLContext.

  • @BelkacemLahouel谢谢,我没有注意到通知.好吧,我认为每个downvote应该有理由,但有些人不这样做.不过,有些人可能会使用答案,所以值得保留:) (4认同)
  • 为什么要downvote?100%回答问题,测试和工作 (2认同)

Shi*_*nsh 7

你不想这样做:

如果您想要整个数据帧的子部分,只需使用limitapi。

例子:

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|
+---+---+
Run Code Online (Sandbox Code Playgroud)

尽管如此,如果您想将 Array[Row] 显式转换为 DataFrame ,您可以执行以下操作

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]
Run Code Online (Sandbox Code Playgroud)

因此现在您可以相应地显示它!


Aru*_*n Y 5

如果有List<Row>,那么可以直接使用它来创建dataframedataset<Row>使用spark.createDataFrame(List<Row> rows, StructType schema)。其中spark是spark 2.x中的SparkSession


Rea*_*onk 0

看一下scaladocs - 我在这里推荐RDD[Row],这意味着你需要到达那里。使用makeRDD应该是最简单的。您还需要一个与您的架构相对应的架构Row,您可以直接从中提取

……你Array[Row]最初是怎么来的?