使用PySpark按列名称及其数值

时间:2017-12-12 19:11:10

标签: python scala apache-spark pyspark rdd

我正在将Scala / Spark模型转换为Python / Spark。问题是我有RDD,大约有100万个观测值和大约33列。 我正在根据数字阈值('时间')拆分RDD。时间变量采用数字格式(双精度)(非posix)。

这是Scala源代码:

// get the time to split the data.
val splitTime = data.stat.approxQuantile("Time", Array(0.7), 0.001).head

val trainingData = data.filter(s"Time<$splitTime").cache()
val validData = data.filter(s"Time>=$splitTime").cache()

这是我的PySpark失败的解释:

splitTime = data.approxQuantile("Time", [0.7], 0.001)
trainingData = data.filter(data["Time"] < splitTime)
validData = data.filter(data["Time"] >= splitTime)

第一行正常。当我尝试在RDD上使用阈值时,问题就开始了。我也无法解决条件及其在条件中的重要性的Scala格式s" >=$ "。关于s" >=$ "含义的互联网来源含糊不清。

1 个答案:

答案 0 :(得分:1)

approxQuantile返回List[float](此处为单列案例)或List[List[float]](多列案例),因此您必须提取值:

splitTime = data.approxQuantile("Time", [0.7], 0.001)
data.filter(data["Time"] < splitTime[0])

(litTime, ) = data.approxQuantile("a", [0.7], 0.001)
trainingData = data.filter(data["Time"] < splitTime)