apache-spark - pyspark 中的 dataframe.write.csv 非常慢
问题描述
我有一个数据框,它是由行联合创建的,
def group_acc_num_and_make_metrics(acc_list: List[str], data_frame: DataFrame):
for acc_no in acc_list:
rows = rows.union(metrics_df(data_frame.filter(data_frame.SOURCE_ACCOUNT_NBR == acc_no), acc_no))
return row
metrics_df 创建了一个包含 109 列的新数据框,因此该函数的返回类型是一个包含 109 列和一些行的数据框
现在,当我想将此数据帧保存到 csv 时,需要花费大量时间,此数据帧中的行数仅为 70,将其写入 csv 文件大约需要 10 分钟。生成的分区csv文件的数量也是70个。重新分区/合并也是一个非常耗时的操作。以下是将其保存到 csv 的代码
def split_test_train(data_frame: DataFrame, number_of_rows):
golden_ratio = 0.1
test_rows = int(number_of_rows * golden_ratio)
train_rows = number_of_rows - test_rows
test_x_df = data_frame.sample(golden_ratio)
train_x_df = data_frame.sample(1-golden_ratio)
test_y_df = test_x_df.select(test_x_df.san, test_x_df.is_fraud)
train_y_df = train_x_df.select(test_x_df.san, test_x_df.is_fraud)
def_path = data_output_path
path = def_path + str(int(datetime.now().timestamp() * 1000))
test_x_df.drop(test_x_df.is_fraud).write.format('com.databricks.spark.csv').save(path + "/test_x")
train_x_df.drop(test_x_df.is_fraud).write.format('com.databricks.spark.csv').save(path + "/train_x")
test_y_df.write.format('com.databricks.spark.csv').save(path + "test_y")
train_y_df.write.format('com.databricks.spark.csv').save(path + "/train_y")
解决方案
推荐阅读
- python - 我错误地卸载了python 2.7,我无法在kali linux(最新版本)中重新安装它
- macos - macOS Mojave 自定义动态壁纸
- python - 谷歌分析在网站上提取当前用户数量
- regex - 正则表达式:提取 url 参数
- ios - TableView 在 View 中覆盖整个屏幕
- javascript - Google Apps 脚本附加幻灯片非常慢
- javascript - 无法获取框架内容,未捕获的 DOMException:阻止具有源“null”的框架访问跨域框架
- javascript - 谷歌脚本:JPG 到文本
- google-app-engine - GCP SSL 证书安装错误“证书数据无效。请确保私钥和公共证书匹配
- java - 获取“java.sql.SQLException:Io 异常:网络适配器无法建立连接”