2016-11-25 56 views

回答

0

看看the scaladocs - 我建议RDD[Row]这里,这意味着你需要到那里。应该是最简单的makeRDD。您还需要一个对应于您的的模式,您可以使用directly pull from it

......你是如何得到Array[Row]的呢?如果你想整个数据框的子部分只使用limit API

0

你不想这样做。

例子:

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| 
+---+---+ 

不过,如果你想明确地将数组[行]到数据帧,你可以这样做

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] 

,因此现在你可以相应地表现出来!

0

在我的回答中,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); 

您也可以映射并行阵列投下的每一行:

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

在一排的情况下,你可以运行:

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

在星火2.0使用SparkSession代替SQLContext 。

+1

为什么downvote? 100%回答问题,测试和工作 –

+0

同意,我甚至认为这应该是公认的答案 – belka

+0

@BelkacemLahouel谢谢:)请投票,如果你发现它有帮助:) –

0

如果您有List<Row>,那么它可以直接用于使用spark.createDataFrame(List<Row> rows, StructType schema)创建dataframedataset<Row>。火花2.x中SparkSession的位置