LN3*_*LN3 1 python numpy apache-spark pyspark
我在 pyspark 中有一个数据集,我为其创建了 row_num 列,因此我的数据如下所示:
#data:
+-----------------+-----------------+-----+------------------+-------+
|F1_imputed |F2_imputed |label| features|row_num|
+-----------------+-----------------+-----+------------------+-------+
| -0.002353| 0.9762| 0|[-0.002353,0.9762]| 1|
| 0.1265| 0.1176| 0| [0.1265,0.1176]| 2|
| -0.08637| 0.06524| 0|[-0.08637,0.06524]| 3|
| -0.1428| 0.4705| 0| [-0.1428,0.4705]| 4|
| -0.1015| 0.6811| 0| [-0.1015,0.6811]| 5|
| -0.01146| 0.8273| 0| [-0.01146,0.8273]| 6|
| 0.0853| 0.2525| 0| [0.0853,0.2525]| 7|
| 0.2186| 0.2725| 0| [0.2186,0.2725]| 8|
| -0.145| 0.3592| 0| [-0.145,0.3592]| 9|
| -0.1176| 0.4225| 0| [-0.1176,0.4225]| 10|
+-----------------+-----------------+-----+------------------+-------+
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用以下方法过滤掉随机选择的行:
count = data.count()
sample = [np.random.choice(np.arange(count), replace=True, size=50)]
filtered = data.filter(data.row_num.isin(sample))
Run Code Online (Sandbox Code Playgroud)
然而第二行给出了一个错误:
AttributeError: 'numpy.int64' object has no attribute '_get_object_id'
Run Code Online (Sandbox Code Playgroud)
是什么原因造成的?我使用相同的过滤代码通过(一和零的二进制列)来溢出行label,这确实有效,但现在重新应用代码不适用于采样
Numpy 数据类型与 Spark 的交互效果不佳。您可以.tolist()在调用之前使用以下命令将它们转换为 Python 数据类型.isin:
sample = np.random.choice(np.arange(count), replace=True, size=50).tolist()
Run Code Online (Sandbox Code Playgroud)