Eva*_*mir 3 amazon-s3 amazon-web-services amazon-redshift apache-spark
我正在尝试通过Spark连接到Amazon Redshift,因此我可以将S3上的数据与RS集群上的数据连接起来。我在这里找到了一些非常简明的文档来说明与JDBC的连接能力:
https://spark.apache.org/docs/1.3.1/sql-programming-guide.html#jdbc-to-other-databases
load命令似乎非常简单(尽管我不知道如何在此处输入AWS凭证,也许在选项中?)。
df = sqlContext.load(source="jdbc", url="jdbc:postgresql:dbserver", dbtable="schema.tablename")
Run Code Online (Sandbox Code Playgroud)
而且我不完全确定如何处理SPARK_CLASSPATH变量。我现在正在通过iPython笔记本在本地运行Spark(作为Spark发行版的一部分)。我在哪里定义以便Spark加载它?
无论如何,就目前而言,当我尝试运行这些命令时,我遇到了一堆无法辨认的错误,所以现在我有点卡住了。任何帮助或指向详细教程的指针,均表示赞赏。
事实证明,您只需要一个用户名/密码即可访问 Spark 中的 Redshift,具体操作如下(使用 Python API):
from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)
df = sqlContext.read.load(source="jdbc",
url="jdbc:postgresql://host:port/dbserver?user=yourusername&password=secret",
dbtable="schema.table"
)
Run Code Online (Sandbox Code Playgroud)
希望这对某人有帮助!
尽管这似乎是一个很老的帖子,但是仍然需要答案的任何人都可以按照以下步骤为我工作!
启动外壳,包括罐子。
bin/pyspark --driver-class-path /path_to_postgresql-42.1.4.jar --jars /path_to_postgresql-42.1.4.jar
Run Code Online (Sandbox Code Playgroud)
通过提供适当的详细信息来创建df:
myDF = spark.read \
.format("jdbc") \
.option("url", "jdbc:redshift://host:port/db_name") \
.option("dbtable", "table_name") \
.option("user", "user_name") \
.option("password", "password") \
.load()
Run Code Online (Sandbox Code Playgroud)
Spark版本:2.2
您首先需要下载 Postgres JDBC 驱动程序。您可以在这里找到它: https: //jdbc.postgresql.org/
您可以在.bashrc、conf/spark-env.sh 或类似文件中定义环境变量 SPARK_CLASSPATH,或者在运行 IPython 笔记本之前在脚本中指定它。
您还可以通过以下方式在conf/spark-defaults.conf中定义它:
spark.driver.extraClassPath /path/to/file/postgresql-9.4-1201.jdbc41.jar
Run Code Online (Sandbox Code Playgroud)
确保它反映在 Spark WebUI 的“环境”选项卡中。
您还需要通过以下方式设置适当的 AWS 凭证:
sparkContext.hadoopConfiguration.set("fs.s3n.awsAccessKeyId", "***")
sparkContext.hadoopConfiguration.set("fs.s3n.awsSecretAccessKey", "***")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10545 次 |
| 最近记录: |