Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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
Apache spark 如何获得pyspark数据帧的相关矩阵?_Apache Spark_Pyspark - Fatal编程技术网

Apache spark 如何获得pyspark数据帧的相关矩阵?

Apache spark 如何获得pyspark数据帧的相关矩阵?,apache-spark,pyspark,Apache Spark,Pyspark,我有一个大的Pypark数据框。我想得到它的相关矩阵。我知道如何使用熊猫数据框获取数据,但我的数据太大,无法转换为熊猫数据。所以我需要用pyspark数据框得到结果。我搜索了其他类似的问题,答案对我来说不适用。 有人能帮我吗?谢谢 数据示例: 欢迎来到SO 示例数据 我准备了一些虚拟数据以便于复制(也许下次您也可以提供一些易于复制的数据;-): 以下是数据: +-------------------+-------------------+-------------------+--------

我有一个大的Pypark数据框。我想得到它的相关矩阵。我知道如何使用熊猫数据框获取数据,但我的数据太大,无法转换为熊猫数据。所以我需要用pyspark数据框得到结果。我搜索了其他类似的问题,答案对我来说不适用。 有人能帮我吗?谢谢

数据示例: 欢迎来到SO

示例数据 我准备了一些虚拟数据以便于复制(也许下次您也可以提供一些易于复制的数据;-):

以下是数据:

+-------------------+-------------------+-------------------+-------------------+--------------------+
|                 x0|                 x1|                 x2|                 x3|                  x4|
+-------------------+-------------------+-------------------+-------------------+--------------------+
| 0.9965335347601945|0.09311299224360992| 0.9273393764180728| 0.8523333283310564|  0.5040716744686445|
| 0.2341313103221958| 0.9356109544246494| 0.6377089480113576| 0.8129047787928055| 0.22215891357547046|
| 0.6310473705907303| 0.2040705293700683|0.17329601185489396| 0.9062007987480959| 0.44105687572209895|
|0.27711903958232764| 0.9434521502343274| 0.9300724702792151| 0.9916836130997986|  0.6869145183972896|
| 0.8247010263098201| 0.6029990758603708|0.07266306799434707| 0.6808038838294564| 0.27937146479120245|
| 0.7786370627473335|0.17583334607075107| 0.8467715537463528|   0.67702427694934|  0.8976402177586831|
|0.40620117097757724| 0.5080531043890719| 0.3722402520743703|0.14555317396545808|  0.7954133091360741|
|0.20876805543974553| 0.9755867281355178| 0.7570617946515066| 0.6974893162590945|0.054708580878511825|
|0.47979629269402546| 0.1851379589735923| 0.4786682088989791| 0.6809358266732168|  0.8829180507209633|
| 0.1122983875801804|0.45310988757198734| 0.4713203140134805|0.45333792855503807|  0.9189083355172629|
+-------------------+-------------------+-------------------+-------------------+--------------------+
解决方案 ml子包中有一个相关函数。但是,它要求您提供类型为
Vector
的列。因此,您需要首先使用将列转换为向量列,然后应用相关性:

from pyspark.ml.stat import Correlation
from pyspark.ml.feature import VectorAssembler

# convert to vector column first
vector_col = "corr_features"
assembler = VectorAssembler(inputCols=df.columns, outputCol=vector_col)
df_vector = assembler.transform(df).select(vector_col)

# get correlation matrix
matrix = Correlation.corr(df_vector, vector_col)
如果要将结果作为numpy数组(在驱动程序上)获取,可以使用以下命令:

matrix.collect()[0]["pearson({})".format(vector_col)].values

array([ 1.        , -0.66882741, -0.06459055,  0.21802534,  0.00113399,
       -0.66882741,  1.        ,  0.14854203,  0.09711389, -0.5408654 ,
       -0.06459055,  0.14854203,  1.        ,  0.33513733,  0.09001684,
        0.21802534,  0.09711389,  0.33513733,  1.        , -0.37871581,
        0.00113399, -0.5408654 ,  0.09001684, -0.37871581,  1.        ])

谢谢。我拿到矩阵了。还有一个问题,您知道如何轻松地将标题(列名)添加到矩阵中吗?列顺序应该保持不变。因此,您可以简单地使用
df.columns
获取列名。您好,我如何打印矩阵corr。它是这样输出的@abdoulsn您必须重新调整numpy数组的形状。一种方法如下所示。注意,它是一个正方形矩阵。cor_np=matrix.collect()[0][“pearson({})”.format(vector_col)].value;dim=len(cor_np);cor_mat=cor_np.重塑((尺寸,尺寸));执行第二部分查看数组时出错
matrix.collect()[0]["pearson({})".format(vector_col)].values

array([ 1.        , -0.66882741, -0.06459055,  0.21802534,  0.00113399,
       -0.66882741,  1.        ,  0.14854203,  0.09711389, -0.5408654 ,
       -0.06459055,  0.14854203,  1.        ,  0.33513733,  0.09001684,
        0.21802534,  0.09711389,  0.33513733,  1.        , -0.37871581,
        0.00113399, -0.5408654 ,  0.09001684, -0.37871581,  1.        ])