【问题标题】:How to get or create a Hadoop client from a Spark Executor如何从 Spark Executor 获取或创建 Hadoop 客户端
【发布时间】:2018-11-19 11:12:51
【问题描述】:

在 Spark Dataframe 上执行 mapPartitions 操作时,有什么方法可以从 Spark Executor 获取 Hadoop FileSystem? 如果没有,至少有什么方法可以获取 Hadoop 配置以生成新的 Hadoop 文件系统?

考虑到 HDFS 是 kerberized。

用例类似于(伪代码):

spark.sql("SELECT * FROM cities").mapPartitions{ iter =>
    iter.groupedBy(some-variable).foreach{ rows =>
        hadoopFS.write(rows)
    }
    TaskContext.getPartitionId
}

【问题讨论】:

  • 有一种方法...但是你为什么不直接在数据框对象上调用 write 方法呢?
  • 因为我想根据一些变量从执行器中创建一种动态分区。那么...请您这样告诉我好吗?
  • 我对伪代码做了一点修改,注意这里不适合调用write方法
  • 鉴于 SparkContext 在 executors 中不可用...我认为@cricket_007 提出的解决方案无效

标签: scala apache-spark hadoop apache-spark-sql hdfs


【解决方案1】:

我找到了解决方案。 Spark utils 包含一个非常简单的序列化 hadoop 配置的方法:https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/util/SerializableConfiguration.scala

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    • 2019-08-22
    • 2018-04-07
    • 2019-05-08
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多