<p>Spark局部线性代数库目前非常薄弱:而且它们不包括上述基本运算。</p>
<p>对于Spark 2.1,有一个JIRA可以解决这个问题,但这对你今天的工作没有帮助。</p>
<p>需要考虑的是:执行转置很可能需要完全洗牌数据。</p>
<p>现在您需要直接编写RDD代码。我用scala编写了<code>transpose</code>,但不是用python。这是<code>scala</code>版本:</p>
<pre><code> def transpose(mat: DMatrix) = {
val nCols = mat(0).length
val matT = mat
.flatten
.zipWithIndex
.groupBy {
_._2 % nCols
}
.toSeq.sortBy {
_._1
}
.map(_._2)
.map(_.map(_._1))
.toArray
matT
}
</code></pre>
<p>所以你可以把它转换成python供你使用。在这个特殊的时刻,我没有足够的带宽来编写/测试它:如果您无法进行转换,请告诉我。</p>
<p>至少-以下内容很容易转换为<code>python</code>。</p>
<ul>
<li><code>zipWithIndex</code>-->;<code>enumerate()</code>(python等价物-记入@zero323)</li>
<li><code>map</code>-->;<code>[someOperation(x) for x in ..]</code></li>
<li><code>groupBy</code>-->;<code>itertools.groupBy()</code></li>
</ul>
<p>以下是<code>flatten</code>的实现,它没有等效的python:</p>
<pre><code> def flatten(L):
for item in L:
try:
for i in flatten(item):
yield i
except TypeError:
yield item
</code></pre>
<p>所以你应该可以把这些放在一起解决问题。</p>