Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/72.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 为什么foreach运算符在使用Dataset时会因NullPointerException而失败?_Scala_Apache Spark_Apache Spark Sql - Fatal编程技术网

Scala 为什么foreach运算符在使用Dataset时会因NullPointerException而失败?

Scala 为什么foreach运算符在使用Dataset时会因NullPointerException而失败?,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,这是我的职责: def TestForeach(dataFrame: DataFrame)={ dataFrame.select("user_id").dropDuplicates().foreach(row =>{ dataFrame.filter("user_id == "+row.getString(0)) }) } 我得到这个错误: ERROR Executor: Exception in task 2.0 in stage 4.0 (TID 16) java.lan

这是我的职责:

def TestForeach(dataFrame: DataFrame)={
  dataFrame.select("user_id").dropDuplicates().foreach(row =>{
  dataFrame.filter("user_id == "+row.getString(0))
  })
}
我得到这个错误:

ERROR Executor: Exception in task 2.0 in stage 4.0 (TID 16)
java.lang.NullPointerException
at org.apache.spark.sql.Dataset.filter(Dataset.scala:1318)

如何获取具有相同用户id的数据帧?

foreach
在执行器上执行操作,而
数据帧仅在驱动程序上可用


您应该在
foreach
之前
collect
。更改后,
foreach
将成为Scala的而非Spark的
foreach

foreach
在执行器上执行操作,而
数据帧
仅在驱动程序上可用


您应该在
foreach
之前
collect
。通过更改,
foreach
不再是Scala的
foreach
,您不能在转换或操作中使用数据帧。您需要首先收集您的用户ID:

def testForeach(dataFrame: DataFrame): Seq[DataFrame] = {
  val userIds: Array[String] = dataFrame.select("user_id").distinct.map(_.getString(0)).collect
  userIds.map(uid => dataFrame.filter($"user_id" === uid)).toSeq
}

不能在转换或操作中使用数据帧。您需要首先收集您的用户ID:

def testForeach(dataFrame: DataFrame): Seq[DataFrame] = {
  val userIds: Array[String] = dataFrame.select("user_id").distinct.map(_.getString(0)).collect
  userIds.map(uid => dataFrame.filter($"user_id" === uid)).toSeq
}

请把这个问题的例外情况包括在内好吗?这将使它更加完整。谢谢请把这个问题的例外情况包括在内好吗?这将使它更加完整。谢谢