从Spark连接到Redshift时无法推断架构

时间:2017-09-08 10:55:55

标签: python apache-spark pyspark parquet

我已经将sparc安装到/opt/spark-2.2.0-bin-hadoop2.7/并使用

运行python shell
pyspark --jars spark-redshift_2.10-3.0.0-preview1.jar,RedshiftJDBC42-1.2.7.1003.jar,hadoop-aws-2.7.1.jar,aws-java-sdk-1.7.4.jar

来自它的文件夹。

然后我尝试使用shell中的以下命令从那里读取:

JDBC='jdbc:redshift://blablabla.regionblabla.redshift.amazonaws.com:5439/blabla?user=username&password=password'

from pyspark.sql import SQLContext
sql_context = SQLContext(sc)

df = sql_context.read \
    .option("url", JDBC) \
    .option("dbtable", "table_name") \
    .option("tempdir", "bucket") \
    .load()

我得到跟踪回溯:

Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
  File "/opt/spark-2.2.0-bin-hadoop2.7/python/pyspark/sql/readwriter.py", line 165, in load
    return self._df(self._jreader.load())
  File "/opt/spark-2.2.0-bin-hadoop2.7/python/lib/py4j-0.10.4-src.zip/py4j/java_gateway.py", line 1133, in __call__
  File "/opt/spark-2.2.0-bin-hadoop2.7/python/pyspark/sql/utils.py", line 69, in deco
    raise AnalysisException(s.split(': ', 1)[1], stackTrace)
pyspark.sql.utils.AnalysisException: u'Unable to infer schema for Parquet. It must be specified manually.;'

经过一番搜索,我发现了一些问题和答案,说明这可能是因为那里没有数据。但请求告诉我表不是空的。所以,我想我有一些连接问题。如何解决这个问题?也许我的错误版本的火花或罐子,或一些罐子丢失?

1 个答案:

答案 0 :(得分:0)

原来我需要使用

添加AWS凭证
 $('#showsecond').hide();
 $("#next").click(function(){
 $("#next").closest('li').remove();
  var listItems = $("#showsecond li");
  listItems.each(function(idx, li) {
    var product = $(li);
    $('#showfirst').append(product);
  });
 
});

并添加选项以向redshift提供相同的凭据:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id="showfirst">
         <h1>Links</h1>
         <li><a href="#">Link 1</a></li>
         <li><a href="#">Link 2</a></li>
         <li><a href="#">Link 3</a></li>
         <li><a href="#">Link 4</a></li>
         <li><a href="#" id="next">show more links </a></li>
      </ul>

      <ul id="showsecond">
         <li><a href="#">Link 5</a></li>
         <li><a href="#">Link 6</a></li>
         <li><a href="#">Link 7</a></li>
         <li><a href="#">Link 8</a></li>
         <li><a href="#">+ links</a></li>
      </ul>

   </section>