繁体   English   中英

R 通过 RODBC 访问 Azure DataBricks 中的镶木地板文件

[英]Access parquet files in Azure DataBricks by R via RODBC

我成功配置了与 Azure DataBricks 集群的连接,并且可以使用以下命令查询表

conn <- odbcConnect("AzureDatabricks")
sqlQuery(conn, "SELECT * FROM my_table")

但我需要访问镶木地板文件。 在 Databricks 中,我可以使用以下代码来完成:

%sql

Select * FROM parquet.`/path/to/folder`

如果我用 R 试试这个

sqlQuery(conn, "Select * FROM parquet.`/path/to/folder`")

我收到错误:

[Simba][SQLEngine] Table or view not found: SPARK.parquet./path/to/folder"
[RODBC] ERROR: Could not SQLExecDirect 'Select * FROM parquet.`/path/to/folder`

有没有办法通过 RODBC 访问镶木地板文件?

由于 sql 查询本身存在错误,您遇到了此问题。 当您运行Select * FROM parquet./path/to/folder时,由于语法错误,您将看不到 table 或 view not found 命令。

示例:用于理解问题的示例示例(当您运行 SELECT * FROM parquer.'somepath' 时),您将看到语法错误。

在此处输入图像描述

注意:从 parquet 文件创建 Dataframe 后,您必须将其注册为临时表才能对其运行sql 查询

val sqlContext = new org.apache.spark.sql.SQLContext(sc)

val df = sqlContext.read.parquet("src/main/resources/peopleTwo.parquet")

df.printSchema

// after registering as a table you will be able to run sql queries
df.registerTempTable("people")

sqlContext.sql("select * from people").collect.foreach(println)

参考: Spark SQL 指南 - Parquet 文件

您需要添加UseNativeQuery=1; odbc 连接字符串的参数。

Examlpe: Driver={Simba Spark ODBC Driver};Host=[serverHost];Port=443;HTTPPath=[httpPath];ThriftTransport=2;SSL=1;AuthMech=3;UID=token;PWD=[pwd];UseNativeQuery=1;

https://docs.databricks.com/integrations/jdbc-odbc-bi.html#ansi-sql-92-query-support-in-odbc

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM