我关注了StackOverflow上关于返回由另一列分组的一列的最大值的帖子,并得到了一个意外的Java异常。
import pyspark.sql.functions as f
data = [('a', 5), ('a', 8), ('a', 7), ('b', 1), ('b', 3)]
df = spark.createDataFrame(data, ["A", "B"])
df.show()
+---+---+
| A| B|
+---+---+
| a| 5|
| a| 8|
| a| 7|
| b| 1|
| b| 3|
+---+---+
from pyspark.sql import Window
w = Window.partitionBy('A')
df.withColumn('maxB', f.max('B').over(w))\
.where(f.col('B') == f.col('maxB'))\
.drop('maxB').show()
#+---+---+
#| A| B|
#+---+---+
#| a| 8|
#| b| 3|
#+---+---+
相反,我得到:
java.lang.UnsupportedOperationException: Cannot evaluate expression: max(input[2, bigint, false]) windowspecdefinition(input[0, string, true], specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$()))
我只在数据库上的Spark2.4上尝试过这一点。我尝试了等效的SQL语法,得到了相同的错误。
Databricks支持能够在Spark2.4上重现这个问题,但在早期版本上没有。显然,它是由物理计划制定方式的不同引起的(如果请求,我可以发布他们的响应)。计划好了一个修复方案。
同时,这里有一个解决原始问题的替代方案,它不会成为2.4版本问题的牺牲品:
df.withColumn("maxB", f.max('B').over(w)).drop('B').distinct().show()
+---+----+
| A|maxB|
+---+----+
| b| 3|
| a| 8|
+---+----+
我正在使用Spring In Action 3 Action学习Spring MVC,我已经实现了显示用户注册表的基本程序,一旦我们提交表单,它将使用进行验证。 这是我的Spring控制器: 这是我的Spitter类文件: 这是我的编辑。显示给用户注册的jsp文件: 要加载表单,我将访问URL为:,一旦表单被加载,我只需提交表单而无需输入任何详细信息,以便我可以检查我的表单是否得到验证。但是我得到
问题内容: 是否有可能在Java 引用上创建方法引用的原因 ?这样做可能永远是不正确的,但是会导致错误,以后很难找到: 问题答案: 是否有可能在Java 引用上创建方法引用的原因 ? 不是 ,但是Eclipse在这方面显然存在一个错误(编辑:此问题已得到修复)。根据规范,当您使用JDK的工具时,它会失败,并且在线上会出现NPE 。 证明:http://ideone.com/APWXna(或编译和本
问题内容: 由于JPQL查询,我试图从中删除大量行。 所述类的定义如下: 如您所见,该类具有“子级”,并且在执行以下查询时: 引发异常: 当然,我可以先选择要删除的所有对象,然后将它们检索到列表中,然后再遍历它以删除所有检索到的对象,但是这种解决方案的性能简直太糟糕了! 那么,有没有一种方法可以利用先前的映射来有效地删除所有对象以及与它们关联的所有对象,而无需先为 所有 子对象编写查询? 问题答案
根据Hibernate文档,在Hibernate抛出异常后使用会话是不安全的。 如果会话抛出异常,包括任何SQLException,立即回滚数据库事务,调用Session.close()并放弃会话实例。某些会话方法不会使会话处于一致状态。Hibernate抛出的任何异常都不能被视为可恢复的。确保通过在finally块中调用close()来关闭会话。 在我的代码中,我正在做批量插入。我正在使用会话。
本文向大家介绍在MySQL中使用“ TYPE = InnoDB”会引发异常吗?,包括了在MySQL中使用“ TYPE = InnoDB”会引发异常吗?的使用技巧和注意事项,需要的朋友参考一下 您可以使用ENGINE = InnoDB代替TYPE = InnoDB,因为TYPE的用法在MySQL 5.1版中已过时。 我们用于示例的版本是MySQL 8.0.12。让我们检查MySQL版本。查询如下-
问题内容: 我在接口抛出异常的地方读了这段代码,但是实现它的类却没有抛出异常或捕获异常,这是为什么呢?在Java中合法或安全吗? 问题答案: 实现和扩展的一般规则是,您可以使新类或接口的限制较少,而不能限制较多。如果您认为将异常作为限制进行处理的要求,则未声明异常的实现的限制性较小。对该接口进行编码的任何人都不会遇到您的课的麻烦。 -斯坦·詹姆斯 作为http://www.coderanch.co