PySpark udf中的Numpy randint返回意外值



我创建了一个udf来在PySpark数据帧中的一列中生成随机的十位数整数:

phone_udf = F.udf(lambda: np.random.randint(low = 1111111111, high = 9999999999), T.IntegerType())
households = sc.union([sc.parallelize([[j]
for j
in np.random.choice(household_sizes, size=partition_size, p=hh_size_probs).tolist()])
for i in range(partition_count)]).toDF(["_household_members"])
.limit(nhouseholds)
.withColumn("household_id", F.row_number().over(w))
.withColumn("_hoh_last_name_id", (F.rand() * name_count).cast("int"))
.withColumn("_hh_address_id", (F.rand() * address_filtered_count).cast("int"))
.withColumn("phone", phone_udf())

然而,得到的数据帧的";电话";列包含所有不同长度的整数,最多10位数字,包括正数和负数。我不确定为什么np.random.randint在udf中的行为没有达到预期。

Spark假设32位整数。由于生成的整数范围(111111111199999999999(包含的整数太高,无法用32位表示,因此spark错误地解释了64位整数。使用spark的LongType((或先将整数转换为字符串都可以消除问题。

最新更新