Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Spark数据帧随机分裂_Python_Apache Spark_Pyspark - Fatal编程技术网

Python Spark数据帧随机分裂

Python Spark数据帧随机分裂,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,我有一个spark数据框,我想将其分为训练、验证和测试,比率为0.60、0.20、0.20 我使用了以下代码进行相同的操作: 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 <

我有一个spark数据框,我想将其分为训练、验证和测试,比率为0.60、0.20、0.20

我使用了以下代码进行相同的操作:

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
def数据分割(x):
全局数据映射变量
d_map=数据_map_变量值
数据行=x.asDict()
随机输入
兰德=随机均匀(0.0,1.0)
ret_列表=()

如果randTL;DR如果要拆分数据帧,请使用:

您的代码在多个级别上都是错误的,但有两个基本问题使其无法修复:

  • Spark转换可以被评估任意次数,并且您使用的函数应该是引用透明且无副作用的。您的代码多次计算
    split\u sdf
    ,并且您使用有状态RNG
    data\u split
    ,因此每次的结果都不同

    这将导致您描述的行为,其中每个子级看到父RDD的不同状态

  • 您没有正确初始化RNG,因此得到的随机值不是独立的


    • TL;DR如果要拆分数据帧,请使用:

      您的代码在多个级别上都是错误的,但有两个基本问题使其无法修复:

      • Spark转换可以被评估任意次数,并且您使用的函数应该是引用透明且无副作用的。您的代码多次计算
        split\u sdf
        ,并且您使用有状态RNG
        data\u split
        ,因此每次的结果都不同

        这将导致您描述的行为,其中每个子级看到父RDD的不同状态

      • 您没有正确初始化RNG,因此得到的随机值不是独立的


      我只有11个值,我在[0.6,0.3,0.1]上进行了拆分,但将其除以[6,5,0]或[8,3,0]我不需要零,因为11仍然可以被分割,因为[6,3,2]在列车、测试和测试中拆分后,是否有办法检查不为零valid@vipin除了调用每个项目的
      count
      ?不是真的。但是,如果您有11条记录,那么使用Spark也没有多大意义,如果您想要特定的分布,您可以随时拆分本地数据,然后将其并行化。对于“真实”大小数据,这通常不是一个问题-你不太可能得到相对较大且平衡的分数的空分割。我只有11个值,我确实在[0.6,0.3,0.1]上进行了分割,但它除以[6,5,0]或[8,3,0]我不需要零,因为11仍然可以除以[6,3,2]有没有办法检查在列车、测试和测试中拆分后不归零valid@vipin除了调用每个项目的
      count
      ?不是真的。但是,如果您有11条记录,那么使用Spark也没有多大意义,如果您想要特定的分布,您可以随时拆分本地数据,然后将其并行化。对于“真实”大小的数据,这通常不是一个问题-您不太可能得到具有相对较大且平衡的分数的空分割。。
      ratings_sdf.randomSplit([0.6, 0.2, 0.2])