<p>使用熊猫内火花你有2选项:-你知道吗</p>
<h2>使用闭包</h2>
<p>Spark的一个困难之处是,在集群中执行代码时,要理解变量和方法的作用域和生命周期。RDD操作在变量的作用域之外修改变量,这常常会引起混淆。在下面的示例中,我们将查看使用foreach()递增计数器的代码,但其他操作也可能出现类似的问题。你知道吗</p>
<p>更多详情请参见[1]</p>
<p>示例</p>
<pre><code>import numpy as np
from pyspark.sql.types import FloatType
import pyspark.sql.functions as F
spk_df = sqlContext.createDataFrame([[0,1,0,0],[1,1,0,0],[0,0,1,0],[1,0,1,1],[1,1,0,0]], ['t1', 't2', 't3', 't4'])
spk_df.show()
B = [2,0,1,0]
V = [5,1,2,4]
def V_sum(row,b,c):
return float(np.sum(c[row==b]))
v_sum_udf = F.udf(lambda row: V_sum(row, B, V), FloatType())
spk_df.withColumn("results", v_sum_udf(F.array(*(F.col(x) for x in spk_df.columns))))
</code></pre>
<p>详情见[2]</p>
<h2>使用自定义项</h2>
<p>对于Spark 2.4.4,有一个现成的使用Spark的方法。细节可以在这里找到,还有例子[3]</p>
<p>1-<a href="http://spark.apache.org/docs/latest/rdd-programming-guide.html#understanding-closures-" rel="nofollow noreferrer">http://spark.apache.org/docs/latest/rdd-programming-guide.html#understanding-closures-</a>
2-<a href="https://stackoverflow.com/questions/47597711/custom-function-over-pyspark-dataframe">Custom function over pyspark dataframe</a>
3-<a href="https://spark.apache.org/docs/latest/sql-pyspark-pandas-with-arrow.html" rel="nofollow noreferrer">https://spark.apache.org/docs/latest/sql-pyspark-pandas-with-arrow.html</a></p>