【发布时间】:2019-10-31 22:24:28
【问题描述】:
我是数据工程/机器学习和自学的新手。在处理示例问题时,我遇到了以下数据清理任务
1. Remove extra whitespaces (keep one whitespace in between word but remove more
than one whitespaces) and punctuations
2. Turn all the words to lower case and remove stop words (list from NLTK)
3. Remove duplicate words in ASSEMBLY_NAME column
虽然我在大学作业期间一直致力于编写代码来执行这些任务,但我从来没有在一段代码中完成过(对于任何项目),我正在寻找可以提供帮助的专家的指导我指出了完成它的最佳方法(in python or scala)
目前已完成的工作:
1.从 parquet 文件中读取数据
partFitmentDF = sqlContext.read.parquet("/mnt/blob/devdatasciencesto/pga-parts-forecast/raw/parts-fits/")
display(partFitmentDF)
partFitmentDF.createOrReplaceTempView("partsFits")
partFitmentDF.write.mode("overwrite").format("delta").saveAsTable("partsFitsTable")
3.重新排列表中 fit_assembly_name 的数据,以便所有 fit_assembly_name 和 fit_assembly_id 对于每个不同的 itemno 都滚动到单行
%sql
select itemno, concat_ws(' | ' , collect_set(cast(fits_assembly_id as int))) as fits_assembly_id, concat_ws(' | ' ,collect_set(fits_assembly_name)) as fits_assembly_name
from partsFitsTable
WHERE itemno = 1014584
group by itemno
附言
partFitmentDF 选定列的示例数据
itemno fits_assembly_id fits_assembly_name
0450056 44011 OIL PUMP ASSEMBLY - A01EA09CA (4999202399920239A06)
0450056 135502 OIL PUMP ASSEMBLY - A02EA09CA/CB/CC (4999202399920239A06)
0450056 37884 OIL PUMP ASSEMBLY - A01EA05CA (4999202399920239A06)
0450056 19618 OIL PUMP ASSEMBLY - A06FA09CA/CB/CC (4999202399920239A06)
0450056 135021 OIL PUMP ASSEMBLY - A02EA05CA (4999202399920239A06)
0450056 4147 OIL PUMP ASSEMBLY - A04KA05CA (4999202359920235A06)
0450056 12003 OIL PUMP ASSEMBLY - A05FA09CA/CB/CC (4999202399920239A06)
现在,我需要将这些多行按项目编号滚动为一行 (属于一个项目编号的所有 assembly_name 和 id 都应该在一行中) 然后我需要执行最顶部列出的任务#1、2 和 3 以清理 fit_assembly_name 列并将处理后的数据保存到带有 itemno、fits_assembly_id 和 fit_assembly_name 列的最终数据帧或表,但我不知道如何开始蟒蛇来做到这一点。您能否通过建议方法(和代码提示)帮助我,以便我可以进一步完成这项任务?
【问题讨论】:
-
pyspark.ml.feature:RegexTokenizer,StopWordsRemover 应该足以满足您的前两个任务,它返回一个字符串数组,使用 array_distinct(仅限 spark 2.4+)删除欺骗。 concat_ws 根据需要将数组转换为字符串。
-
感谢您的指导。你能分享一下如何应用它的骨架吗?如果问的太多,我很抱歉。由于我是新手,我不确定如何将其应用于数据框的
fits_aeesbly_field。例如:我可以编写函数来分别删除标点符号或多余的空格,但我对如何将这些函数应用于数据框字段(即 fit_assembly_name)感到困惑。例如,code ' '.join(mystring.split())将删除两个或多个空格并将其替换为一个,但我不确定如何在 sql 处理后将其应用于 fit_assembly_name 字段。 -
你的 spark 版本是什么?您可以添加一些示例数据并发布所需的结果吗?
-
@jxc:Spark 版本是 2.4.4,我在最底部发布了几行示例数据和更新的查询。
标签: python-3.x scala apache-spark pyspark nltk