这基本上是可行的,但是您应该考虑使用Spark来实现这一点是否有意义。如果您需要绘制随机值,那么您可能需要在一个循环中重复多次。每次迭代都需要扫描所有数据(可能不止一次)。在
因此,将所需的数据拟合到内存中,然后从中随机提取值几乎可以肯定是正确的方法。如果您的数据实在太大而无法放入内存中,请考虑(a)只收集为此目的所需的列;(b)是否可以以合理的方式将数据合并。在
话虽如此,它在Spark内是可行的。下面是pysaprk代码来演示这个想法。在import random
import pyspark.sql.functions as F
from pyspark.sql.window import Window
# read some sample data (shown below)
df = spark.read.csv("prb.csv",sep='\t',inferSchema=True,header=True)
# find the sum of the value column
ss = df.groupBy().agg( F.sum("vl").alias("sum") ).collect()
# add a column to store the normalized values
q = df.withColumn("nrm_vl", (df["vl"] / ss[0].sum) )
w = Window.partitionBy().orderBy("nrm_vl")\
.rowsBetween(Window.unboundedPreceding, Window.currentRow)
q