首页 > 解决方案 > 比较 Spark 和 Scala 中的两个 DataFrame

问题描述

我有一个从 CSV 文件加载数据的 DataFrame,我正在尝试一些数据清理活动,其中一项任务是查找唯一性占总数或行数的百分比,如果该百分比小于某个阈值,我只会删除这些列。这是我到目前为止所拥有的:

val df = spark.read
  .format("csv")
  .option("delimiter", ";")
  .option("header", "true") //first line in file has headers
  //.option("mode", "DROPMALFORMED")
  .load("work/youtube_videos.csv")

val df2 = df.select(df.columns.map(c => (lit(100) * countDistinct(col(c)) / count(col(c))).alias(c)): _*)

val colsToDrop =  df2.selectExpr(df2.first().getValuesMap[Double](df2.columns).filter(elem => elem._2 < 1.0).keys.toSeq: _*).columns
colsToDrop foreach println

所以现在我有两个 DataFrame,我将不得不使用 colsToDrop DataFrame,我已经确定了要删除的列和原始 DataFrame。我可以在原始 DataFrame 上使用这个 colsToDrop Array 并摆脱它们。这是一个好主意/方法吗?有什么有效的方法吗?

标签: dataframeapache-spark

解决方案


这就是我目前为得到我想要的东西而做的事情:

val newDF = df.drop(colsToDrop:_*)
newDF.show(false)

推荐阅读