【问题标题】:How to convert dataframe rows to IndexedRow in pyspark?如何在pyspark中将数据框行转换为IndexedRow?
【发布时间】:2020-11-21 20:36:52
【问题描述】:

我有一个如下所示的表格:

+-------+---- -+-------+-------+----
|movieId|Action| Comedy|Fantasy| ...
+-------+----- +-------+-------+----
|  1001 |  1   |   1   |   0   | ...
|  1011 |  0   |   1   |   1   | ...
+-------+------+-------+-------+----

如何将其每一行转换为 IndexedRow?所以我有这样的事情:

+-------+----------------+
|movieId|    Features    |
+-------+----------------+
|  1001 | [1, 1, 0, ...] | 
|  1011 | [0, 1, 1, ...] |
+-------+----------------+

【问题讨论】:

标签: python apache-spark apache-spark-mllib


【解决方案1】:

如果需要数组类型的输出,可以使用array()函数。

from pyspark.sql import functions as F
from pyspark.sql.window import Window
tst= spark.createDataFrame([(1,7,80),(1,8,40),(1,5,100),(5,8,90),(7,6,50),(0,3,60)],schema=['col1','col2','col3'])
tst_arr= tst.withColumn("Features",F.array(tst.columns))

tst_arr.show()
+----+----+----+-----------+
|col1|col2|col3|   Features|
+----+----+----+-----------+
|   1|   7|  80| [1, 7, 80]|
|   1|   8|  40| [1, 8, 40]|
|   1|   5| 100|[1, 5, 100]|
|   5|   8|  90| [5, 8, 90]|
|   7|   6|  50| [7, 6, 50]|
|   0|   3|  60| [0, 3, 60]|
+----+----+----+-----------+

如果您尝试为 ML 操作执行此操作,那么最好使用向量汇编器:http://spark.apache.org/docs/2.4.0/api/python/_modules/pyspark/ml/feature.html#VectorAssembler

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    • 2022-08-16
    • 1970-01-01
    • 2021-11-25
    • 2018-03-02
    • 1970-01-01
    相关资源
    最近更新 更多