我目前面临的情况是我有String元组(大小为2),如果它们至少有一个共同的元素,则应该认为两个元组是相等的.我有以下课程实现这个想法:
public class MyTuple
{
private List<String> list = Arrays.asList(new String[2]);
public List<String> getList()
{
return list;
}
public void set(String firstElement, String secondElement)
{
list.set(0, firstElement);
list.set(1, secondElement);
}
@Override
public boolean equals(Object other)
{
if (other instanceof MyTuple) {
return !Collections.disjoint(this.list, ((MyTuple) other).getList());
}
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,根据hashCode()合同:
如果两个对象根据equals(Object)方法相等,则对两个对象中的每一个调用hashCode()方法必须生成相同的整数结果.
如何覆盖我的hashCode()方法不违反合同?
我尝试使用以下连接字符串通过 JDBC 连接到 Hive:
Class.forName("org.apache.hive.jdbc.HiveDriver")
hiveConString = "jdbc:hive2://localhost:10000/default;principal=hive/_HOST@HADOOP.LOCALDOMAIN"
Run Code Online (Sandbox Code Playgroud)
虽然我遇到以下错误:
Exception in thread "main" java.sql.SQLException: Could not open client transport with JDBC Uri:jdbc:hive2://localhost:10000/default;principal=hive/_HOST@HADOOP.LOCALDOMAIN:GSS initiate failed
Run Code Online (Sandbox Code Playgroud)
我已经检查了 hive-site.xml 以确保遵循 kerbersoe 身份验证。XML 文件包括:
<property>
<name>hive.server2.authentication.kerberos.principal</name>
<value>hive/_HOST@HADOOP.LOCALDOMAIN</value>
</property>
Run Code Online (Sandbox Code Playgroud)
我还确保包含所有必需的 Maven 存储库。
另外,我正在使用 Eclipse 在 VM 上运行代码。