【问题标题】:How to overwrite the rdd saveAsPickleFile(path) if file already exist in pyspark?如果pyspark中已经存在文件,如何覆盖rdd saveAsPickleFile(path)?
【发布时间】:2018-03-28 07:50:23
【问题描述】:

如何覆盖 当我们节省时间时,RDD 输出对象任何现有的路径。

测试1:

975078|56691|2.000|20171001_926_570_1322
975078|42993|1.690|20171001_926_570_1322
975078|46462|2.000|20171001_926_570_1322
975078|87815|1.000|20171001_926_570_1322

rdd=sc.textFile('/home/administrator/work/test1').map( lambda x: x.split("|")[:4]).map( lambda r: Row( user_code = r[0],item_code = r[1],qty = float(r[2])))
rdd.coalesce(1).saveAsPickleFile("/home/administrator/work/foobar_seq1")

第一次正常保存。现在我又从输入中删除了一行 文件和保存RDD相同的位置,它表明文件已经存在。

rdd.coalesce(1).saveAsPickleFile("/home/administrator/work/foobar_seq1") 

例如,在数据框中,我们可以覆盖现有路径。

df.coalesce(1).write().overwrite().save(path)

如果我在 RDD 对象上做同样的事情,得到一个错误。

rdd.coalesce(1).write().overwrite().saveAsPickleFile(path)

请帮帮我

【问题讨论】:

标签: apache-spark pyspark rdd pyspark-sql


【解决方案1】:

您好,您可以像下面这样保存 RDD 文件 注意(代码在 scala 中,但 python 的逻辑也应该相同)我使用的是 2.3.0 spark 版本。

  val sconf = new SparkConf().set("spark.hadoop.validateOutputSpecs", "False").setMaster("local[*]").setAppName("test")
  val scontext = new SparkContext(sconf)
  val lines = scontext.textFile("s${filePath}", 1)
    println(lines.first)
    lines.saveAsTextFile("C:\\Users\\...\\Desktop\\sample2")

或者如果你使用 DataFrame 然后使用

DF.write.mode(SaveMode.Overwrite).parquet(path.parquet)

或了解更多信息,请查看this

【讨论】:

  • 嗨 Raj 感谢您的回复,“DF.write.mode(SaveMode.Overwrite).parquet(path.parquet")”用于数据框,但我想保存 RDD 对象。
  • 好的,我已经提供了用于 rdd 的旧版本,请尝试一下
  • 我会试试的,你能提供新版本吗?
  • pyspark 2.2 版本
  • ok 对于 2.2 版本你是否使用 sparkContext 或 SparkSession 如果 sparkContext 那么这将工作 sparkconf = SparkConf().setAppName("someName").set("spark.hadoop.validateOutputSpecs", False) sparkcontext = SparkContext(conf = sparkconf),
【解决方案2】:

同时,rdd 没有写入模式,您可以将 rdd 转换为 df ,使用 df 覆盖模式。如下:

df.coalesce(1).toDF().map(lambda x: (x,)).write.csv(path=yourpath, mode='overwrite')

【讨论】:

    猜你喜欢
    • 2017-10-29
    • 1970-01-01
    • 1970-01-01
    • 2019-11-12
    • 1970-01-01
    • 2015-02-02
    • 1970-01-01
    • 2021-02-10
    • 2012-08-11
    相关资源
    最近更新 更多