Python Spark-如何从数据集中提取n行?

Python Spark-如何从数据集中提取n行?,python,apache-spark,Python,Apache Spark,我有一个48790行的pyspark数据帧,其中37109行有[income==0]。 我想把这37109行减少到随机的10000行。因此,我只剩下10000行income==0(我正在为一个ML算法平衡类) 如何获取10000行数据帧 我试过: data8 = data6.filter("income == 0") data9 = data8.sample(False, 10000/float(data8.count())) print data6.count(), data8.count

我有一个48790行的pyspark数据帧,其中37109行有[income==0]。 我想把这37109行减少到随机的10000行。因此,我只剩下10000行income==0(我正在为一个ML算法平衡类)

如何获取10000行数据帧

我试过:

data8 = data6.filter("income == 0")

data9 = data8.sample(False, 10000/float(data8.count()))

print data6.count(), data8.count(), data9.count()
48790 37109 10094
但它给出了一个错误:

data10 = data6.subtract(data9)

data10.count()

Py4JJavaError: An error occurred while calling o3692.count.
: java.lang.RuntimeException: no default for type org.apache.spark.ml.linalg.VectorUDT@3bfc3ba7
以下是data6模式:

StructType(List(StructField(features,VectorUDT,true),StructField(income,DoubleType,true)))

当我使用DataFrame的“Exception”功能时,spark 2.1.0版也会遇到同样的问题。这非常令人困惑,而且似乎是“except”函数的错误


“exception”或“subtract”运算符将触发LeftAnti plan,然后调用“JoinSelection.apply”函数,其中将调用“ExtractEquiJoinKeys.unapply”函数,然后调用“Literal.default”函数,但是“Literal.default”函数不支持VectorUDT的数据类型,它只是引发运行时异常。这就是问题的原因。

take()
sample()
不起作用?据我所知,[take]返回一个列表,这可能会耗尽内存,我已经在这里使用了[sample]。是否有正式的问题/错误报告?不知道。看起来问题在开发过程中得到了解决: