以下是一个示例代码,它将数据框按列值拆分为多个数据框:
import org.apache.spark.sql.{DataFrame, SparkSession}
object DataFrameSplitter {
def splitDataFrameByColumnValue(df: DataFrame, column: String): Map[String, DataFrame] = {
val distinctValues = df.select(column).distinct().collect()
distinctValues.map(row => {
val value = row.get(0).toString
val filteredDF = df.filter(df(column) === value)
value -> filteredDF
}).toMap
}
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder()
.appName("DataFrameSplitter")
.master("local")
.getOrCreate()
import spark.implicits._
val data = Seq(
("Alice", 25, "New York"),
("Bob", 30, "London"),
("Charlie", 35, "New York"),
("David", 40, "London"),
("Eve", 45, "New York")
)
val df = data.toDF("Name", "Age", "City")
val splitDataFrames = splitDataFrameByColumnValue(df, "City")
splitDataFrames.foreach { case (value, df) =>
println(s"Data frame with $value:")
df.show()
}
spark.stop()
}
}
此示例代码使用SparkSession创建一个Spark应用程序。它基于给定的列名将数据框拆分为多个数据框。您可以根据需要更改数据源和要拆分的列名。
在示例代码中,我们使用了一个名为splitDataFrameByColumnValue
的函数来执行拆分操作。此函数首先使用distinct()
方法获取指定列的唯一值。然后,它使用filter()
方法将数据框按列值筛选,并将每个筛选后的数据框与列值关联为键值对。最后,它将这些键值对映射到一个Map中,并将其作为结果返回。
在main()
方法中,我们创建了一个包含一些示例数据的数据框。然后,我们调用splitDataFrameByColumnValue()
函数将数据框按“City”列值拆分。最后,我们遍历拆分后的数据框并打印结果。
上一篇:按列值将DataFrame拆分
下一篇:按列值将Spark分区数据集