【问题标题】:TypeError: 'JavaPackage' object is not callable when using rdd.foreach()TypeError: 'JavaPackage' 对象在使用 rdd.foreach() 时不可调用
【发布时间】:2016-09-21 06:27:55
【问题描述】:

我正在尝试将文件从 S3 保存到 hdfs,按年、月和日分区。 我有 S3 中的文件路径以及 RDD 中的日期信息。

def saveFile(filePath): 
    df = sqlContext.read.format("com.databricks.spark.csv")
        .options(delimiter='|',header=True)
        .load(filePath[0],schema=schema)
    df.write.mode("overwrite") 
        .save(targetDir+"/year="+filePath[1]+"/month="+filePath[2]+"/day="+filePath[3])

filePathsRDD.foreach(saveFile)

RDD.foreach 函数失败并出现错误:

TypeError: 'JavaPackage' 对象不可调用

【问题讨论】:

  • 嗨,你试过通配符吗? stackoverflow.com/questions/37639956/…
  • 我想将每天的文件保存在一个单独的文件夹中,这就是我每天阅读它们的原因。我也可以通过在数据框中读取所有内容(使用通配符)并将其保存为镶木地板,按日期分区来做到这一点。但是,此操作需要驱动程序中的较高 resultSize,这是我们将来扩展时的问题。

标签: pyspark rdd


【解决方案1】:

这是不可能的。先收藏:

>>> for path in filePathsRDD.collect():
...     saveFile(path)

【讨论】:

  • 我知道我可以做到。我正在尝试分发它,因为我每天和每年的数据都有一条路径。
  • 你不能,对不起。
猜你喜欢
  • 2017-01-04
  • 2020-02-24
  • 2022-08-11
  • 1970-01-01
  • 1970-01-01
  • 2019-02-02
  • 1970-01-01
  • 2021-06-22
相关资源
最近更新 更多