小编pma*_*a93的帖子

将大熊猫DataFrame保存到S3的最快方法是什么?

我正在尝试找出将大熊猫DataFrame写入S3文件系统的最快方法。我目前正在尝试两种方法:

1)通过gzip压缩(BytesIO)和boto3

gz_buffer = BytesIO()

with gzip.GzipFile(mode='w', fileobj=gz_buffer) as gz_file:
    df.to_csv(TextIOWrapper(gz_file, 'utf8'), index=False)

s3_resource = boto3.resource('s3')
s3_object = s3_resource.Object(bucket, s3_path + name_zip)
s3_object.put(Body=gz_buffer.getvalue())
Run Code Online (Sandbox Code Playgroud)

对于700万行的数据帧,大约需要420秒才能写入S3。

2)通过不压缩即可写入csv文件(StringIO缓冲区)

csv_buffer = StringIO()
data.to_csv(csv_buffer)
s3_resource = boto3.resource('s3')
s3_resource.Object(bucket, s3_path + name_csv).put(Body=csv_buffer.getvalue())
Run Code Online (Sandbox Code Playgroud)

大约需要371秒...

问题是:还有其他更快的方法可以将熊猫数据帧写入S3吗?

amazon-s3 python-3.x pandas

4
推荐指数
1
解决办法
1530
查看次数

从 Spark DataFrame 中删除仅满足两个条件的行

我正在使用 Scala 和 Spark。我想从 DataFrame 中过滤掉不满足我指定的所有条件的某些行,同时保留可能只满足其中一个条件的其他行。

例如:假设我有这个 DataFrame

+-------+----+
|country|date|
+-------+----+
|      A|   1|
|      A|   2|
|      A|   3|
|      B|   1|
|      B|   2|
|      B|   3|
+-------+----+
Run Code Online (Sandbox Code Playgroud)

并且我想过滤掉国家/地区A和日期12,以便预期的输出应该是:

+-------+----+
|country|date|
+-------+----+
|      A|   3|
|      B|   1|
|      B|   2|
|      B|   3|
+-------+----+
Run Code Online (Sandbox Code Playgroud)

如您所见,我仍然B使用日期12.

我尝试filter按以下方式使用

df.filter("country != 'A' and date not in (1,2)")
Run Code Online (Sandbox Code Playgroud)

但是输出过滤掉了所有日期 1 和 2,这不是我想要的。

谢谢。

scala apache-spark

2
推荐指数
1
解决办法
3751
查看次数

标签 统计

amazon-s3 ×1

apache-spark ×1

pandas ×1

python-3.x ×1

scala ×1