Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pyspark数据处理为矢量化格式_Python_Pyspark_Apache Spark Mllib - Fatal编程技术网

Python Pyspark数据处理为矢量化格式

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','

我有一个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','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中按类型反规范化值计数?如有任何指导/见解,将不胜感激

您提前知道可能的颜色和字母(所需的输出列名)吗?不知道-实际上会有数千种颜色等价物。