我需要将现有数据框的现有行映射成多行。 例如,根据一行中的某些字段是否彼此相等/相等,我需要为该现有行创建x个行。
谢谢。
我正在做一些搜索并了解了爆炸的知识,但我认为它只能以1列作为输入,所以我想知道是否存在诸如Dataframe的平面图之类的东西,还是我需要将Dataframe转换为RDD并执行平面图并将其转换回DataFrame。
我已经尝试过使用.rdd将其设置为rdd,但它会导致行的RDD,我需要flatMap行->多行,但不确定如何做到这一点。
n / a
如果我有一行包含字段[a,b,c,d,e,f,g],则转换之一可能是a == c,则该行映射到2个新行,如果a! = c然后将行映射到6个新行。
答案 0 :(得分:2)
您可以通过以下方式进行操作:
import org.apache.spark.sql._
import spark.implicits._
val rows = List((10, 20, 30, 40, 50, 60, 70), (10, 20, 10, 40, 50, 60, 70))
val inDF = spark.sparkContext.parallelize(rows).toDF("a", "b", "c", "d", "e", "f", "g")
inDF.show()
// +---+---+---+---+---+---+---+
// | a| b| c| d| e| f| g|
// +---+---+---+---+---+---+---+
// | 10| 20| 30| 40| 50| 60| 70|
// | 10| 20| 10| 40| 50| 60| 70|
// +---+---+---+---+---+---+---+
val outDF = inDF.sqlContext.createDataFrame(inDF.rdd.flatMap {
case row if row.getInt(0) == row.get(2) => List(row, row)
case row if row.getInt(0) != row.get(2) => List(row, row, row, row, row, row)
}, inDF.schema)
outDF.show()
// +---+---+---+---+---+---+---+
// | a| b| c| d| e| f| g|
// +---+---+---+---+---+---+---+
// | 10| 20| 30| 40| 50| 60| 70|
// | 10| 20| 30| 40| 50| 60| 70|
// | 10| 20| 30| 40| 50| 60| 70|
// | 10| 20| 30| 40| 50| 60| 70|
// | 10| 20| 30| 40| 50| 60| 70|
// | 10| 20| 30| 40| 50| 60| 70|
// | 10| 20| 10| 40| 50| 60| 70|
// | 10| 20| 10| 40| 50| 60| 70|
// +---+---+---+---+---+---+---+
答案 1 :(得分:0)
我建议使用.toPands()函数制作一个熊猫数据框,并做任何您想做的事!