【问题标题】:MatrixEntry not iterable when processing CoordinateMatrix... pyspark MLlib处理 CoordinateMatrix 时 MatrixEntry 不可迭代... pyspark MLlib
【发布时间】:2017-10-04 04:33:46
【问题描述】:

我正在尝试在 CoordinateMatrix 上执行此行...

test = test.entries.map(lambda (i, j, v): (j, (i, v)))

Scala 中的等效项似乎可以工作,但在 pyspark 中却失败了。行执行时出现的错误...

'MatrixEntry' object is not iterable

并确认我正在使用 CoordinateMatrix...

>>> test = test_coord.entries
>>> test.first()
>>> MatrixEntry(0, 0, 7.0)

有人知道会发生什么吗?

【问题讨论】:

    标签: pyspark apache-spark-mllib


    【解决方案1】:

    假设test是一个CoordinatedMatrix,那么:

    test.entries.map(lambda e: (e.j, (e.i, e.value)))
    

    附注:您不能在 lambda 函数中解压缩元组。所以map(lambda (x, y, z): ) 在这种情况下不起作用,即使它似乎不是失败的原因。


    示例

    test = CoordinateMatrix(sc.parallelize([(1,2,3), (4,5,6)]))
    test.entries.collect()
    # [MatrixEntry(1, 2, 3.0), MatrixEntry(4, 5, 6.0)]
    test.entries.map(lambda e: (e.j, (e.i, e.value))).collect()
    # [(2L, (1L, 3.0)), (5L, (4L, 6.0))]
    

    【讨论】:

    • 谢谢!我认为变量 (i j v) 必须在左边
    猜你喜欢
    • 2011-02-18
    • 2016-08-23
    • 2021-02-23
    • 2022-09-23
    • 2016-08-11
    • 2011-08-27
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多