scala 访问 Dataframe SPARK中所有行的字段

jogvjijk  于 2022-11-23  发布在  Scala
关注(0)|答案(2)|浏览(125)

好吧,这看起来很容易,但我找不到任何解决方案或响应。我只是有一个 Dataframe 与列充满空值,我只是想填补它与“s”或“n”随机。
我试过了

df.foreach(f=>{
  
  if(random)
    f.get(4) = "s"
  else{f.get(4) = "n"}
})

`
但是不起作用,因为我认为f只是一个列表,而不是实际的值。伪值应该是这样的:

for(i=0;i<max_rows;i++)
  if(prob<.5)
   {df[i]["column_field"] == "s"}
  else
   {df[i]["column_field"] == "n"}
r9f1avp5

r9f1avp51#

替换所有整数列和长列

df.na.fill(0)
  .show(false)

替换为特定列

df.na.fill(0,Array("population"))
  .show(false)

字符串类型所有列

df.na.fill("")
  .show(false)

特定列

df.na.fill("unknown",Array("city"))
  .na.fill("",Array("type"))
  .show(false)
mqkwyuun

mqkwyuun2#

DataFrame na fill
Class DataFrame
为您的问题添加新值

import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions._
import spark.implicits._
val df1 = Seq((0.5f, "v1"), (0.2f, "v2"), (1f, "v3"), (4f, "v4"))
  .toDF("prob", "column_field")
df1.show(false)
/*
+----+------------+
|prob|column_field|
+----+------------+
|0.5 |v1          |
|0.2 |v2          |
|1.0 |v3          |
|4.0 |v4          |
+----+------------+
*/
val resDF = df1.withColumn(
  "column_field",
  when(col("prob") <= 0.5f, "s")
    .otherwise("n")
)

resDF.show(false)
/*
+----+------------+
|prob|column_field|
+----+------------+
|0.5 |s           |
|0.2 |s           |
|1.0 |n           |
|4.0 |n           |
+----+------------+
*/

相关问题