【发布时间】:2020-04-16 12:55:32
【问题描述】:
我是 Python 和 DataFrame 的新手。在这里,我正在编写 Python 代码以在 AWS Glue 中运行 ETL 作业。请在下面找到相同的代码 sn-p。
test_DyF = glueContext.create_dynamic_frame.from_catalog(database="teststoragedb", table_name="testtestfile_csv")
test_dataframe = test_DyF.select_fields(['empid','name']).toDF()
现在上面的 test_dataframe 的类型是pyspark.sql.dataframe.DataFrame
现在,我需要遍历上面的 test_dataframe。据我所知,我只能看到collect 或toLocalIterator。请找到下面的示例代码
for row_val in test_dataframe.collect():
但这两种方法都非常缓慢且效率不高。我不能使用 pandas,因为 AWS Glue 不支持它。
请找出我正在做的步骤
来源信息:
productid|matchval|similar product|similar product matchval
product A|100|product X|100
product A|101|product Y|101
product B|100|product X|100
product C|102|product Z|102
预期结果:
product |similar products
product A|product X, product Y
product B|product X
product C|product Z
这是我正在编写的代码
- 我正在使用 productID 获得源的不同数据框
-
循环遍历这个不同的数据框集
a) 从源中获取产品的 matchval 列表
b) 根据 matchval 过滤器识别相似产品
c) 循环获取连接字符串 ---> 使用 rdd.collect 的循环会影响性能
您能否就可以做的事情分享任何更好的建议?
【问题讨论】:
-
你试图通过循环实现的逻辑是什么?
-
嗨@MohammadMurtazaHashmi,基本上我有嵌套循环,我在内部for循环中遇到这个问题,因为collect()将被多次调用。我需要在内部循环中以逗号分隔格式获取名称。
标签: python amazon-web-services dataframe pyspark aws-glue