如何将这一行转换为数据框?
{{1}}
由于
答案 0 :(得分:7)
在我的回答中,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");
在Spark 2.0中使用SparkSession而不是SQLContext。
答案 1 :(得分:2)
你不想这样做:
如果您想要整个dataFrame的子部分,只需使用limit
api。
示例:强>
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|
+---+---+
如果您想将数组[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]
因此现在你可以相应地显示它!
答案 2 :(得分:0)
看看the scaladocs - 我在这里推荐RDD[Row]
,这意味着您需要到达那里。使用makeRDD应该最简单。您还需要一个与您的Row
相对应的架构,您可以directly pull from it。
......你是如何获得Array[Row]
的?{/ p>
答案 3 :(得分:0)
如果您有List<Row>
,则可以直接使用dataframe
创建dataset<Row>
或spark.createDataFrame(List<Row> rows, StructType schema)
。 Spark中的火花是火花2.x