如果文件已存在于pyspark中,如何覆盖rdd saveAsPickleFile(path)?

时间:2018-03-28 07:50:24

标签: apache-spark pyspark rdd pyspark-sql

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

test1:

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)

请帮我这个

2 个答案:

答案 0 :(得分:0)

您好,您可以保存如下的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("C:\\Users\\...\\Desktop\\Sampledata.txt", 1)
    println(lines.first)
    lines.saveAsTextFile("C:\\Users\\...\\Desktop\\sample2")

或者如果您正在使用DataFrame,请使用

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

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

答案 1 :(得分:0)

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

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