【问题标题】:Fastest way to generate data using pyspark (on aws glue)使用 pyspark 生成数据的最快方法(在 aws 胶水上)
【发布时间】:2019-01-04 17:29:28
【问题描述】:

我正在尝试将 AWS GLUE 与 pyspark 结合使用,以使用 Python Faker 库生成假数据。我对 pyspark 不是很熟悉,我想找到最快的方法来生成假数据(最多 10 tb 左右)。特别是,我目前使用的基于行的生成大约需要 15 分钟才能生成 1.5 GB:

import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.dynamicframe import DynamicFrame
from awsglue.job import Job

from pyspark.sql import Row
from faker import Faker 

## @params: [JOB_NAME]
args = getResolvedOptions(sys.argv, ['JOB_NAME'])

sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)

# number of records
num_records = int(1e6)

# faker settings
fake = Faker('nl_NL')
fake_line = lambda x: Row(fake.sha256(), fake.name(), fake.street_name(), fake.province(), fake.country(), fake.phone_number(), fake.email(), fake.iban())
df_header = ['sha256', 'name', 'streetname', 'province', 'country', 'phonenumber', 'email', 'iban']

# create 
df = sc.parallelize(range(0, num_records)).map(fake_line).toDF(schema = df_header)
dynamic_df = DynamicFrame.fromDF(df, glueContext, 'dynamic_faker')

glueContext.write_dynamic_frame.from_options(
frame = dynamic_df,
connection_type = "s3",
connection_options = {"path": "s3://bucket-path"},
format = "csv",
transformation_ctx = "")

job.commit()

【问题讨论】:

    标签: python amazon-web-services apache-spark pyspark aws-glue


    【解决方案1】:

    如果将输出格式从csv 更改为parquet,性能应该会提高很多。由于您的虚假数据很大,您可能不想下载并阅读它,所以如果它不是人类可读的也没关系。

    另一种选择是在 Glue 上增加 DPU 的数量,以便它可以在每个时间单位处理更多数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-26
      • 2021-01-28
      • 1970-01-01
      • 2021-07-21
      • 2022-12-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多