org.apache.spark.sql.SQLContext无法加载文件

时间:2017-11-07 17:55:13

标签: apache-spark docker cassandra

我有一个简单的Spark作业,它从一个管道分离的文件读取值并在其上做一些业务逻辑,并在我们的DB中写入处理过的值。

所以要加载文件,我使用的是org.apache.spark.sql.SQLContext。这是我必须将文件加载为DataFrame

的代码
 DataFrame df = sqlContext.read()
            .format("com.databricks.spark.csv")
            .option("header", "false")
            .option("comment", null)
            .option("delimiter", "|")
            .option("quote", null)
            .load(pathToTheFile);

现在的问题是 1. load功能无法加载文件 2.关于这个问题没有提供太多细节(例外),除了在我的控制台中我得到了

WARN  2017-11-07 17:26:40,108 akka.remote.ReliableDeliverySupervisor: Association with remote system [akka.tcp://sparkExecutor@172.17.0.2:35359] has failed, address is now gated for [5000] ms. Reason is: [Disassociated].
ERROR 2017-11-07 17:26:40,134 org.apache.spark.scheduler.cluster.SparkDeploySchedulerBackend: Asked to remove non-existent executor 0

并继续进行投票。

我确信,该​​文件在正确格式的预期文件夹中可用。但不知道这个日志是什么以及为什么SQLContext能够加载文件。

这是我的build.gradle的依赖项部分:

dependencies {

provided(
        [group: 'org.apache.spark', name: 'spark-core_2.10', version: '1.4.0'],
        [group: 'org.apache.spark', name: 'spark-sql_2.10', version: '1.4.0'],
        [group: 'com.datastax.spark', name: 'spark-cassandra-connector-java_2.10', version: '1.4.0']
)

    compile([
            [group: 'com.databricks', name: 'spark-csv_2.10', version: '1.4.0'],
    ])


}

我在docker容器

中运行此作业

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

您可以检查问题是否不一样as this thread

  

Long story简短,akka打开动态,random ports for each job。因此,简单的NAT失败   您可以尝试使用DNS服务器和docker的--net=host

     

根据雅各布的建议,我开始使用--net=host,这是最新版本的docker中的新选项。
  我还将SPARK_LOCAL_IP设置为主机的IP地址,然后AKKA不使用主机名,并且我不需要Spark驱动程序的主机名可解析。

您还可以将Dockerfile与P7h/docker-spark 2.2.0中使用的Dockerfile进行比较,看看是否存在可能解释该问题的任何差异。