2017-12-12 5 views
0

私はScala/SparkモデルをPython/Sparkに翻訳しています。問題は、約100万の観測と約33列のRDDがあることです。 数値しきい値( '時間')に基づいてRDDを分割しています。 time変数は数値形式(double)(posixではなく)です。ここでフィルタースパークRDDとPySparkの列名とその数値

は、Scalaのソースコードです:

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

最初の行が正常に動作します:

// 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が解釈を失敗しています。この問題は、RDDでしきい値を使用しようとすると開始されます。また、Scalaのフォーマットs" >=$ "を条件とその重要度の前後でデコードできませんでした。 s" >=$ "の意味でのインターネットソースは曖昧です。

答えて

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) 
関連する問題