Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala Spark将数据帧API中的所有NAN替换为null_Scala_Apache Spark_Spark Dataframe - Fatal编程技术网

Scala Spark将数据帧API中的所有NAN替换为null

Scala Spark将数据帧API中的所有NAN替换为null,scala,apache-spark,spark-dataframe,Scala,Apache Spark,Spark Dataframe,我有一个包含许多双(和/或浮点)列的数据帧,其中确实包含NAN。我想用null替换所有的NaN(即Float.NaN和Double.NaN) 例如,对于单列x,我可以这样做: val newDf = df.withColumn("x", when($"x".isNaN,lit(null)).otherwise($"x")) 这是可行的,但我想同时对所有列执行此操作。我最近发现了DataFrameNAFunctions(df.na)fill,这听起来正是我需要的。不幸的是,我没有做到以上几点填充

我有一个包含许多双(和/或浮点)列的数据帧,其中确实包含NAN。我想用null替换所有的NaN(即Float.NaN和Double.NaN)

例如,对于单列
x
,我可以这样做:

val newDf = df.withColumn("x", when($"x".isNaN,lit(null)).otherwise($"x"))
这是可行的,但我想同时对所有列执行此操作。我最近发现了
DataFrameNAFunctions
df.na
fill
,这听起来正是我需要的。不幸的是,我没有做到以上几点<代码>填充应使用给定值替换所有的NaN和Null,因此我会:

df.na.fill(null.asInstanceOf[java.lang.Double]).show
这给了我一个
NullpointerException

还有一种很有前途的
replace
方法,但我甚至无法编译代码:

df.na.replace("x", Map(java.lang.Double.NaN -> null.asInstanceOf[java.lang.Double])).show
奇怪的是,这让我

Error:(57, 34) type mismatch;
 found   : scala.collection.immutable.Map[scala.Double,java.lang.Double]
 required: Map[Any,Any]
Note: Double <: Any, but trait Map is invariant in type A.
You may wish to investigate a wildcard type such as `_ <: Any`. (SLS 3.2.10)
    df.na.replace("x", Map(java.lang.Double.NaN -> null.asInstanceOf[java.lang.Double])).show
错误:(57,34)类型不匹配;
找到:scala.collection.immutable.Map[scala.Double,java.lang.Double]
必需:地图[任何,任何]
注意:Double要在Spark中将所有NaN替换为
null
,只需为每列创建替换值的
映射,如下所示:

val map = df.columns.map((_, "null")).toMap
然后,您可以使用
fill
将NaN替换为空值:

df.na.fill(map)
例如:

scala> val df = List((Float.NaN, Double.NaN), (1f, 0d)).toDF("x", "y")
df: org.apache.spark.sql.DataFrame = [x: float, y: double]

scala> df.show
+---+---+
|  x|  y|
+---+---+
|NaN|NaN|
|1.0|0.0|
+---+---+

scala> val map = df.columns.map((_, "null")).toMap
map: scala.collection.immutable.Map[String,String] = Map(x -> null, y -> null)

scala> df.na.fill(map).printSchema
root
 |-- x: float (nullable = true)
 |-- y: double (nullable = true)


scala> df.na.fill(map).show
+----+----+
|   x|   y|
+----+----+
|null|null|
| 1.0| 0.0|
+----+----+
我希望这有帮助

要在Spark中将所有NaN替换为
null
,只需为每列创建替换值的
映射,如下所示:

val map = df.columns.map((_, "null")).toMap
然后,您可以使用
fill
将NaN替换为空值:

df.na.fill(map)
例如:

scala> val df = List((Float.NaN, Double.NaN), (1f, 0d)).toDF("x", "y")
df: org.apache.spark.sql.DataFrame = [x: float, y: double]

scala> df.show
+---+---+
|  x|  y|
+---+---+
|NaN|NaN|
|1.0|0.0|
+---+---+

scala> val map = df.columns.map((_, "null")).toMap
map: scala.collection.immutable.Map[String,String] = Map(x -> null, y -> null)

scala> df.na.fill(map).printSchema
root
 |-- x: float (nullable = true)
 |-- y: double (nullable = true)


scala> df.na.fill(map).show
+----+----+
|   x|   y|
+----+----+
|null|null|
| 1.0| 0.0|
+----+----+

我希望这有帮助

要使用Pyspark API将所有NaN替换为Spark数据帧中的任何值,可以执行以下操作:

col_list=[column1,column2]
df=df.na.fill(替换为值,列列表)

要使用Pyspark API将Spark数据框中的所有NaN替换为任何值,可以执行以下操作:

col_list=[column1,column2]
df=df.na.fill(将_替换为_值,列列表)

谢谢,但我仍在琢磨为什么当您将“null”定义为字符串文字时,这一定是某种内部魔法?谢谢,但我仍在琢磨为什么当您将“null”定义为字符串文字时,这一定是某种内部魔法?