我一直在玩databrick笔记本,我遇到了一个奇怪的问题。逻辑是我读了 parsed_points_df
从一个文件中,缓存它,然后从中创建一个Dataframe。但是,根据列顺序,mllib的randomsplit()生成不同的数据集,因此标签列的平均值也不同。既然平均数是交换的和结合的,结果不应该是相同的吗?
我不确定到底是什么问题。我看了不同的博客,尝试了不同的技术,比如缓存、重新分区,但似乎什么都没用。
代码段1和2如下:
代码段1
parsed_data_df = parsed_points_df.select( parsed_points_df['labels'] - min_year,
'features').withColumnRenamed('(labels - 1922.0)', 'label') //COLUMN ORDER 1
weights = [.8, .1, .1]
seed = 42
parsed_train_data_df, parsed_val_data_df, parsed_test_data_df =
parsed_data_df.randomSplit(weights, seed=seed)
average_train_year = (parsed_train_data_df.selectExpr('avg(label) as avg')).first()
代码段2
parsed_data_df = parsed_points_df.select('features', parsed_points_df['labels'] -
min_year,).withColumnRenamed('(labels - 1922.0)', 'label'). // COLUMN ORDER 2
weights = [.8, .1, .1]
seed = 42
parsed_train_data_df, parsed_val_data_df, parsed_test_data_df =
parsed_data_df.randomSplit(weights, seed=seed)
average_train_year = (parsed_train_data_df.selectExpr('avg(label) as avg')).first()
1条答案
按热度按时间9cbw7uwe1#
即使你有
seed
但是,由于df.sample
已实施。你可以阅读下面的博客文章,深入探讨为什么会这样。一般建议是读取源数据,执行拆分,将每个Dataframe存储为单独的文件,然后在所有实验中始终使用这些保存的Dataframe。