【问题标题】:Is it possible to add DataFrame`s data to existing csv file?是否可以将 DataFrame 的数据添加到现有的 csv 文件中?
【发布时间】:2019-09-17 19:07:02
【问题描述】:

在远程 SFTP 服务器中,我有带有一些数据的 csv 文件。是否可以将 DataFrame 的数据添加到这个现有文件中?换句话说,csv文件中以前的数据不应该被覆盖。

我使用spark-sftp 库来完成这项任务,并注意到下面的代码重新创建了文件。换句话说,csv文件中以前的数据消失了。您有什么建议可以改善这种情况?

val df: DataFrame = Seq(
    ("Alex", "2018-01-01 00:00:00", "2018-02-01 00:00:00", "OUT"),
    ("Bob", "2018-02-01 00:00:00", "2018-02-05 00:00:00", "IN"),
    ("Kate", "2018-02-01 00:00:00", "2018-02-05 00:00:00", "IN"),
    ("Alice", "2018-02-01 00:00:00", "2018-02-05 00:00:00", "OUT"),
).toDF("FIRST_NAME", "START_DATE", "END_DATE", "STATUS")

df.write.
    format("com.springml.spark.sftp").
    option("host", "XXXX").
    option("username", "XXXX").
    option("password", "****").
    option("fileType", "csv").
    option("delimiter", ";").
    save("/PATH/test.csv")

【问题讨论】:

    标签: scala csv apache-spark apache-spark-sql sftp


    【解决方案1】:

    只需添加附加模式选项:

        mode(SaveMode.Append).
    

    完整示例:

    import org.apache.spark.sql.SaveMode
    df.write.
        format("com.springml.spark.sftp").
        option("host", "XXXX").
        option("username", "XXXX").
        option("password", "****").
        option("fileType", "csv").
        option("delimiter", ";").
        mode(SaveMode.Append).
        save("/PATH/test.csv")
    

    【讨论】:

    • 您好!我尝试了您的代码,但不幸的是它覆盖了现有的 csv 文件。您还有其他想法吗?
    • 你确定?你能发布你的整个代码来检查它吗?和我的一模一样吗?
    • 是的,我确定。我只是按照您的建议添加mode(SaveMode.Append),仅此而已。你测试你的代码吗?在我看来,this 中的 spark-sftp 库忽略了我们的 mode 选项。您如何看待这个假设?
    【解决方案2】:

    你需要在追加模式下写。

    df.write.
    mode("append").
    format("com.springml.spark.sftp")
    ...
    

    【讨论】:

    • 您好!我尝试了您的代码,但不幸的是它覆盖了现有的 csv 文件。您还有其他想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-23
    • 2013-07-06
    • 2013-07-06
    • 2023-04-07
    • 2020-09-28
    相关资源
    最近更新 更多