我正在运行一个小的Amazon EMR集群,并希望通过JDBC从远程连接写入其Hive数据库。我遇到了一个错误,如果我在该EMR集群上本地执行所有内容,也会出现错误,这就是为什么我认为故障不是远程连接而是直接在EMR上发生的事情。
运行此最小示例时出现错误:
connectionProperties = {
"user" : "aengelhardt",
"password" : "doot",
"driver" : "org.apache.hive.jdbc.HiveDriver"
}
from pyspark.sql import DataFrame, Row
test_df = sqlContext.createDataFrame([
Row(name=1)
])
test_df.write.jdbc(url= "jdbc:hive2://127.0.0.1:10000", table = "test_df", properties=connectionProperties, mode="overwrite")
然后我收到了很多Java错误消息,但我认为重要的是这些:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/spark/python/pyspark/sql/readwriter.py", line 940, in jdbc
self.mode(mode)._jwrite.jdbc(url, table, jprop)
File "/usr/lib/spark/python/lib/py4j-0.10.6-src.zip/py4j/java_gateway.py", line 1160, in __call__
File "/usr/lib/spark/python/pyspark/sql/utils.py", line 63, in deco
return f(*a, **kw)
File "/usr/lib/spark/python/lib/py4j-0.10.6-src.zip/py4j/protocol.py", line 320, in get_return_value
py4j.protocol.Py4JJavaError: An error occurred while calling o351.jdbc.
: org.apache.hive.service.cli.HiveSQLException: Error while compiling statement: FAILED: ParseException line 1:23 cannot recognize input near '"name"' 'BIGINT' ')' in column name or primary key or foreign key
最后一行暗示在创建表格时出现了一些问题,因为他试图指定名称&#39;专栏作为&#39; BIGINT&#39;那里。
我发现this question有类似的问题,问题是错误地指定了SQL查询。但是在这里,我没有指定查询,因此我不知道发生了什么或如何修复它。
截至目前,我不知道如何更深入地找到原因。有没有人有解决方案或如何进一步寻找原因的想法?