我正在使用辛巴科技公司的JDBC驱动程序与谷歌云扳手连接。它在 Java .sql 中按预期运行。当,我试图将simba JDBC驱动程序与Spark的JDBC读取器一起使用,以便将查询输出读取为数据帧,但是,它给出了错误的输出。
这是我的扳手台:
UserID UserName
1 Vaijnath
2 Ganesh
3 Rahul
元数据:UserID(字符串)< br >用户名(字符串)
我正在执行查询:选择*来自用户
当我将 Simba JDBC 驱动程序与 Java Sql 一起使用时,此查询会获取正确的数据,但是当我将其与 Spark SQL 的 JDBC 读取器一起使用时,它无法获取数据。
它将DataFrame返回为
+------+--------+
|UserID|UserName|
+------+--------+
|UserID|UserName|
|UserID|UserName|
|UserID|UserName|
+------+--------+
正如我们所看到的,它返回正确的元数据和行数,但是,行包含列名。
以下是我正在使用的代码:
import java.util.Properties
import org.apache.spark.sql.{DataFrame, SparkSession}
object spannerIn {
val sparkSession =SparkSession
.builder()
.appName("Spark SQL basic example").master("local")
.config("spark.sql.warehouse.dir", "file:///tmp")
.config("spark.sql.shuffle.partitions", 1)
.getOrCreate()
val properties =new Properties()
properties.setProperty("user", "")
properties.setProperty("password", "")
properties.setProperty("driver", "com.simba.cloudspanner.core.jdbc42.CloudSpanner42Driver")
val connectionURL="jdbc:cloudspanner://localhost;Project=abc;Instance=pqr;Database=xyz;PvtKeyPath=FilePath"
val selectQuery="(select * from users)"
def main(args: Array[String]): Unit = {
val df = createJdbcDataframe()
df.show()
}
def createJdbcDataframe(): DataFrame = {
sparkSession.read.jdbc(connectionURL, selectQuery, properties)
}
}
我的问题是,我可以在Spark中使用Simba JDBC驱动程序吗?如果是,那么我还需要补充什么。任何帮助,谢谢。
这是因为Spark默认情况下使用双引号(“)引用所有标识符,这意味着正在生成以下查询:
SELECT "UserID", "UserName" FROM USERS
这被Cloud Spanner解释为选择两个固定的字符串。它与大多数其他数据库中的基本相同:
SELECT 'UserID', 'UserName' FROM USERS
Google Cloud Spanner使用反斜杠(`)来引用标识符,并期望这样:
SELECT `UserID`, `UserName` FROM USERS
要解决此问题,您需要为Google Cloud Spanner注册特定的JDBC方言,并注册反引号以进行如下引用:
Class.forName("nl.topicus.jdbc.CloudSpannerDriver");
SparkSession spark = SparkSession.builder().appName("Java Spark SQL basic example")
.config("spark.some.config.option", "some-value").master("local").getOrCreate();
String sparkURL = "jdbc:cloudspanner://localhost;Project=project-id;Instance=instance-id;Database=db;PvtKeyPath=pathToKeyFile.json";
JdbcDialects.registerDialect(new JdbcDialect()
{
private static final long serialVersionUID = 1L;
@Override
public boolean canHandle(String url)
{
return url.toLowerCase().startsWith("jdbc:cloudspanner:");
}
@Override
public String quoteIdentifier(String column)
{
return "`" + column + "`";
}
});
Dataset<Row> dataset = spark.read().jdbc(sparkURL, "ACCOUNT", new Properties());
dataset.show();
请注意,我没有在Simba驱动上测试过以上内容,只在这个驱动上测试过:https://github.com/olavloite/spanner-jdbc,我想它应该也能在Simba驱动上工作。
我需要将升级到。 Microsoft网站有以下信息: sqljdbc41.jar ;类库提供了对JDBC4.0 API的支持。它包括JDBC4.0驱动程序的所有特性以及JDBC4.0 API方法。不支持JDBC 4.1(将引发异常“SQLFeaturenotSupportedException”)。 因此,已经在java中运行的JDBC API将正常工作。 但是,Microsoft ODBC驱动程
我正在学习SeleniumWebDriver,在成功使用firefox之后,现在我想尝试启动Chrome。所以我设置了它的驱动程序 但是当代码流到达驱动程序时。get()指令我收到此异常: 并显示此页面: “只允许本地连接”是什么意思?如何修复?
我需要你的帮助:我必须读卡与RFID阅读器,在我的java应用程序。最后,当我点击按钮“Attributer Numéro RFID”时,它会读取我的RFID阅读器(型号:OCS ACRurw),然后将十六进制值插入jtextfield文本区域。(一开始,jTable会得到我数据库中每个用户的姓和名。这是我项目的代码。如果有人知道我点击“Attributer Numéro RFID”按钮时如何读取
我试图让“更改订阅”使用Android的驱动器API工作,但到目前为止还没有成功。 null 有人知道这个问题的解决方案吗,或者能指出我做错了什么吗? 我编写了一些简单的testcode(见下文),它只需要连接的,下面是我测试的内容: 1. 3. 如果我通过testFileUpdate用一些新数据更新文件,我会在上得到以下结果: 和:
我正试图使用IntelliJ IDE从Spark连接到老虎机数据库。有人能帮助jdbc驱动程序(。jar)文件吗?我正在寻找“com.tigergraph.jdbc.驱动程序”。 我确实找到了下面的gitHub存储库,其中包含了所有必需的信息。java文件。但是,我不知道如何在我的spark项目中使用它。https://github.com/tigergraph/ecosys/tree/maste
有一个问题,它不隐藏浏览器,我能做什么?