Python Pyspark数据处理为矢量化格式
我有一个900M行的数据集,我想在使用pyspark/mllib时应用一些机器学习算法,我正在努力将数据集转换为正确的格式 数据有点奇怪,因为它有多个属于相同变量的行和列Python Pyspark数据处理为矢量化格式,python,pyspark,apache-spark-mllib,Python,Pyspark,Apache Spark Mllib,我有一个900M行的数据集,我想在使用pyspark/mllib时应用一些机器学习算法,我正在努力将数据集转换为正确的格式 数据有点奇怪,因为它有多个属于相同变量的行和列 import pandas as pd mapDict = {'Letter':'Letter','Color1':'Color', 'Color2':'Color','Color3':'Color'} df = pd.DataFrame([['Foo','A','Green','Red','Blue'],['Foo','
import pandas as pd
mapDict = {'Letter':'Letter','Color1':'Color', 'Color2':'Color','Color3':'Color'}
df = pd.DataFrame([['Foo','A','Green','Red','Blue'],['Foo','B','Red','Orange','Blue'],['Bar','A','Orange','Yellow','Green']],
columns = ['Type','Letter','Color1','Color2','Color3'])
df
Type Letter Color1 Color2 Color3
0 Foo A Green Red Blue
1 Foo B Red Orange Blue
2 Bar A Orange Yellow Green
我需要对两个变量(在我的示例中是字母和颜色)的频率计数进行非规范化,以便能够适当地进行矢量化
以下是我将在pandas中有效执行的转换,以及所需的输出:
mapDict = {'Letter':'Letter','Color1':'Color', 'Color2':'Color','Color3':'Color'}
df_out = pd.melt(df,id_vars = ['Type'],value_vars = ['Letter','Color1','Color2','Color3'])
df_out['variable'] = df_out['variable'].map(mapDict)
df_out = df_out.groupby(['variable','value','Type']).size().unstack().transpose().fillna(0)
df_out.columns = df_out.columns.droplevel(0)
print df_out
value Blue Green Orange Red Yellow A B
Type
Bar 0 1 1 0 1 1 0
Foo 2 1 1 2 0 1 1
现在,我有一个自定义rdd.flatmap函数,后面跟着一个groupby.pivot,但这是slooowww,效率低下,并且没有考虑到有两个相同类型的行
有人对我如何编写一个等效版本的pandas代码有什么建议吗?我必须在pyspark中按类型反规范化值计数?如有任何指导/见解,将不胜感激 您提前知道可能的颜色和字母(所需的输出列名)吗?不知道-实际上会有数千种颜色等价物。