无法使用 Spark 连接器从 GreenPlum 读取

Posted

技术标签:

【中文标题】无法使用 Spark 连接器从 GreenPlum 读取【英文标题】:Not able to read from GreenPlum using Spark Connector 【发布时间】:2020-03-21 15:20:04 【问题描述】:

请有人可以帮助我摆脱这个问题。

我正在尝试使用 GreenPlum-Spark 连接器从 Greenplum 读取数据。我使用了从https://network.pivotal.io/products/pivotal-gpdb/ 下载的 jar greenplum-spark_2.11-1.5.0.jar

我正在尝试从 spark-shell 和导入的 jar 访问 greenplum,如下所示

C:\spark-shell --jars C:\jars\greenplum-spark_2.11-1.6.2.jar

scala>val gscReadOptionMap = Map(
      "url" -> "jdbc:postgresql://server-ip:5432/db_name",
      "user" -> "user_id",
      "password" -> "pwd",
      "dbschema" -> "schema_name",
      "dbtable" -> "table_name",
      "driver" -> "org.postgresql.Driver"
)

scala>val gpdf = spark.read.format("greenplum").options(gscReadOptionMap).load()

(或)

scala>val gpdf = spark.read.format("io.pivotal.greenplum.spark.GreenplumRelationProvider").options(gscReadOptionMap).load()

导致以下错误: java.lang.IllegalArgumentException:“schema_name”中不存在''。“table_name”表 在 io.pivotal.greenplum.spark.GreenplumRelationProvider.createRelation(GreenplumRelationProvider.scala:50) 在 org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:318) 在 org.apache.spark.sql.DataFrameReader.loadV1Source(DataFrameReader.scala:223) 在 org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:211) 在 org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:167) ... 49 省略

【问题讨论】:

【参考方案1】:

您的gscReadOptionMap 中缺少partitionColumn 选项。例如:

val gscOptionMap = Map(
    "url" -> "jdbc:postgresql://gsc-dev/tutorial",
    "user" -> "gpadmin",
    "password" -> "changeme",
    "dbschema" -> "faa",
    "dbtable" -> "otp_c",
    "partitionColumn" -> "airlineid"
)

更多详情请关注documentation。

【讨论】:

感谢@frankgh 的回复。但是必须提供'partitionColumn'吗?我按照您的建议尝试了“partitionColumn”->“col”,但得到了以下错误:data type of 'col' is not supported for partitioning; supported data types are bigint, bigserial, integer, and serial 但实际上该列是数字类型。这里有什么帮助吗? partitionColumn 是必需选项。我建议你对分区列使用不同的列,不支持numeric/decimal 类型。 partitionColumn 仅支持 bigintbigserialintegerserial 类型的列。

以上是关于无法使用 Spark 连接器从 GreenPlum 读取的主要内容,如果未能解决你的问题,请参考以下文章

Greenplum Spark Connector org.postgresql.util.PSQLException: ERROR: error when writing data to gpfdi

从Greenplum上的表中读取数据时,如何在Spark-jdbc应用程序的选项“dbtable”中指定子查询? [复制]

Greenplum-Spark-Connector java.util.NoSuchElementException: None.get

无法从使用 mongo spark 连接器读取的 spark DF 中显示/写入。

Greenplum 并行下载转储到本地集群

无法从 Windows 上的 pgadmin 连接到 greenplum postgresql