私は、列車、妥当性検査、およびテストに比率0.60,0.20,0.20で分割したいスパークデータフレームを持っています。 スパークデータフレームランダム分割
Iは同一のため、次のコードを使用する:
def data_split(x):
global data_map_var
d_map = data_map_var.value
data_row = x.asDict()
import random
rand = random.uniform(0.0,1.0)
ret_list =()
if rand <= 0.6:
ret_list = (data_row['TRANS'] , d_map[data_row['ITEM']] , data_row['Ratings'] , 'train')
elif rand <=0.8:
ret_list = (data_row['TRANS'] , d_map[data_row['ITEM']] , data_row['Ratings'] , 'test')
else:
ret_list = (data_row['TRANS'] , d_map[data_row['ITEM']] , data_row['Ratings'] , 'validation')
return ret_list
split_sdf = ratings_sdf.map(data_split)
train_sdf = split_sdf.filter(lambda x : x[-1] == 'train').map(lambda x :(x[0],x[1],x[2]))
test_sdf = split_sdf.filter(lambda x : x[-1] == 'test').map(lambda x :(x[0],x[1],x[2]))
validation_sdf = split_sdf.filter(lambda x : x[-1] == 'validation').map(lambda x :(x[0],x[1],x[2]))
print "Total Records in Original Ratings RDD is {}".format(split_sdf.count())
print "Total Records in training data RDD is {}".format(train_sdf.count())
print "Total Records in validation data RDD is {}".format(validation_sdf.count())
print "Total Records in test data RDD is {}".format(test_sdf.count())
#help(ratings_sdf)
Total Records in Original Ratings RDD is 300001
Total Records in training data RDD is 180321
Total Records in validation data RDD is 59763
Total Records in test data RDD is 59837
私の元のデータフレームがIに分割を行いマッパー関数を渡すために使用ratings_sdfあります。
列車の合計を確認すると、検証とテストはスプリット(元の評価)の合計とはなりません。そして、これらの数字はコードの実行ごとに変わります。
残りのレコードはどこにありますか?また、合計が等しくない理由は何ですか?