Scala Spark错误:不支持的文字类型类sql.catalyst.expressions.GenericRowWithSchema

Scala Spark错误:不支持的文字类型类sql.catalyst.expressions.GenericRowWithSchema,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,Spark错误:不支持的文字类型类sql.catalyst.expressions.GenericRowWithSchema 我正在执行以下命令: crimeDF.where($"IncidntNum ===" +a(0)) 但是得到这个错误: java.lang.RuntimeException:不支持的文本类型类org.apache.spark.sql.catalyst.expressions.GenericRowWithSchema[991309046] 位于org.apache.sp

Spark错误:不支持的文字类型类sql.catalyst.expressions.GenericRowWithSchema

我正在执行以下命令:

crimeDF.where($"IncidntNum ===" +a(0))
但是得到这个错误:

java.lang.RuntimeException:不支持的文本类型类org.apache.spark.sql.catalyst.expressions.GenericRowWithSchema[991309046]
位于org.apache.spark.sql.catalyst.expressions.Literal$.apply(literals.scala:77)
位于org.apache.spark.sql.catalyst.expressions.Literal$$anonfun$create$2.apply(literals.scala:163)
位于org.apache.spark.sql.catalyst.expressions.Literal$$anonfun$create$2.apply(literals.scala:163)
在scala.util.Try.getOrElse(Try.scala:79)
位于org.apache.spark.sql.catalyst.expressions.Literal$.create(literals.scala:162)
位于org.apache.spark.sql.functions$.typedLit(functions.scala:112)
位于org.apache.spark.sql.functions$.lit(functions.scala:95)
位于org.apache.spark.sql.Column.$plus(Column.scala:648)
... 76删去

您试图将整个
行作为文本传递。在后续查询中使用该行之前,先从该行中提取该值:

crimeDF.where($"IncidntNum" === a(0).getInt(0))


取决于输出中的数字是
Int
s还是
String
s。

您正试图将整个
行作为文本传递。在后续查询中使用该行之前,先从该行中提取该值:

crimeDF.where($"IncidntNum" === a(0).getInt(0))

取决于输出中的数字是
Int
s还是
String
s。

您应该这样做

var a = crimeDF.select(max($"IncidntNum")).take(1)(0).getAs[Int](0)
然后

crimeDF.where($"IncidntNum" === a)

你应该做什么

var a = crimeDF.select(max($"IncidntNum")).take(1)(0).getAs[Int](0)
然后

crimeDF.where($"IncidntNum" === a)


我在一个现在被删除的答案中提出了
crimeDF.where($“incidnum”==a(0))
,但显然它也不起作用。它不应该是
IncidentNum
吗?也许你应该提供更多关于
crimeDF
a
是什么的信息。试着找出一个相同的错误,其中($“incidnum”==lit(a(0)))在执行此命令时是什么是a(0)还是a?根据您的建议,我已经做出了所需的修改,现在我希望它会变得清晰。在现在删除的答案中,我提出了
crimeDF。其中($“incidnum”==a(0))
,但显然它也不起作用。它不应该是
IncidentNum
吗?也许你应该提供更多关于
crimeDF
a
是什么的信息。尝试在执行此命令时出现一个相同的错误($“incidnum”===lit(a(0))。什么是a(0)或a?根据您的建议,我已经做了所需的修改,现在我希望可以清楚地看到我得到了这个错误java.lang.ClassCastException:java.lang.String不能在org.apache.spark.sql.Row$class.getInt(Row.scala:223)的scala.runtime.BoxesRunTime.unextoint(BoxesRunTime.java:101)中转换为java.lang.Integer在org.apache.spark.sql.catalyst.expressions.GenericRow.getInt(rows.scala:165)上。。。77elided@AmanRaturi那么,它是一个
字符串
,而不是
Int
。改为使用getAs[String]
。如果您没有提供完全可编译的代码,我该如何判断
991309046
是存储为字符串还是Int。。。好的,事实上,我可以从您刚刚加载一个CSV文件这一事实推断出这一点,该文件将生成一系列带字符串的行。仍然:没有独立的可编译/可执行示例,这就是结果…@Andrey Tyukin感谢您的支持support@AmanRaturi不客气。但是,“谢谢”-评论是(另请参阅),因为它们无助于改进答案,因此对内容没有任何贡献。改用新的。此外,
@
-通知机制不适用于空格。我得到以下错误:java.lang.ClassCastException:java.lang.String不能在org.apache.spark.sql.Row$class.getInt(Row.scala:223)的scala.runtime.BoxesRunTime.unextoint(BoxesRunTime.java:101)中转换为java.lang.Integer在org.apache.spark.sql.catalyst.expressions.GenericRow.getInt(rows.scala:165)上。。。77elided@AmanRaturi那么,它是一个
字符串
,而不是
Int
。改为使用getAs[String]
。如果您没有提供完全可编译的代码,我该如何判断
991309046
是存储为字符串还是Int。。。好的,事实上,我可以从您刚刚加载一个CSV文件这一事实推断出这一点,该文件将生成一系列带字符串的行。仍然:没有独立的可编译/可执行示例,这就是结果…@Andrey Tyukin感谢您的支持support@AmanRaturi不客气。但是,“谢谢”-评论是(另请参阅),因为它们无助于改进答案,因此对内容没有任何贡献。改用新的。而且,
@
-通知机制不适用于空格。你能帮我用这个吗
crimeDF.where($"IncidntNum" === lit(a))