从 Redshift returns 空 DataFrame 读取 Spark DataFrame
Reading Spark DataFrame from Redshift returns empty DataFrame
我正在使用:
- python 3.6.8
- 火花 2.4.4
I 运行 pyspark
与 EMR 集群 (emr-5.28.0) 具有:pyspark --packages org.apache.spark:spark-avro_2.11:2.4.4
我在 spark 类路径中有以下 jar:
- http://repo1.maven.org/maven2/com/databricks/spark-redshift_2.11/2.0.1/spark-redshift_2.11-2.0.1.jar
- http://repo1.maven.org/maven2/com/databricks/spark-avro_2.11/4.0.0/spark-avro_2.11-4.0.0.jar
- https://github.com/ralfstx/minimal-json/releases/download/0.9.5/minimal-json-0.9.5.jar
- https://s3.amazonaws.com/redshift-downloads/drivers/jdbc/1.2.15.1025/RedshiftJDBC41-no-awssdk-1.2.15.1025.jar
我执行这段代码:
url = "jdbc:redshift://my.cluster:5439/my_db?user=my_user&password=my_password"
query = "select * from schema.table where trunc(timestamp)='2019-09-10'"
df = sqlContext.read.format('com.databricks.spark.redshift')\
.option("url", url)\
.option("tempdir", "s3a://bucket/tmp_folder")\
.option("query", query)\
.option("aws_iam_role", "arn_iam_role")\
.load()
然后 df.count()
它 returns 73(这是该查询的行数)但是如果我 df.show(4)
它 returns 一个空的 DataFrame,不错误,它只是打印架构。
我通过将格式更改为 'jdbc' 并仅使用数据块驱动程序写入数据而不是读取数据来使其工作。
我正在使用:
- python 3.6.8
- 火花 2.4.4
I 运行 pyspark
与 EMR 集群 (emr-5.28.0) 具有:pyspark --packages org.apache.spark:spark-avro_2.11:2.4.4
我在 spark 类路径中有以下 jar:
- http://repo1.maven.org/maven2/com/databricks/spark-redshift_2.11/2.0.1/spark-redshift_2.11-2.0.1.jar
- http://repo1.maven.org/maven2/com/databricks/spark-avro_2.11/4.0.0/spark-avro_2.11-4.0.0.jar
- https://github.com/ralfstx/minimal-json/releases/download/0.9.5/minimal-json-0.9.5.jar
- https://s3.amazonaws.com/redshift-downloads/drivers/jdbc/1.2.15.1025/RedshiftJDBC41-no-awssdk-1.2.15.1025.jar
我执行这段代码:
url = "jdbc:redshift://my.cluster:5439/my_db?user=my_user&password=my_password"
query = "select * from schema.table where trunc(timestamp)='2019-09-10'"
df = sqlContext.read.format('com.databricks.spark.redshift')\
.option("url", url)\
.option("tempdir", "s3a://bucket/tmp_folder")\
.option("query", query)\
.option("aws_iam_role", "arn_iam_role")\
.load()
然后 df.count()
它 returns 73(这是该查询的行数)但是如果我 df.show(4)
它 returns 一个空的 DataFrame,不错误,它只是打印架构。
我通过将格式更改为 'jdbc' 并仅使用数据块驱动程序写入数据而不是读取数据来使其工作。