randomSplit pyspark 更改数据帧的值
Posted
技术标签:
【中文标题】randomSplit pyspark 更改数据帧的值【英文标题】:randomSplit pyspark Changes the values of the dataframe 【发布时间】:2018-10-04 14:18:50 【问题描述】:我在 PySpark 中有一个相当大的数据框 (100GB),我想将其拆分为训练、测试和验证集。这是踢球者,我在它工作之前已经完成了它,但这次尝试它,它返回的数据帧的所有值都从实际值更改为 1 或 0。 唯一从工作变为不工作的是,我删除了两个字符串列。 当包含字符串的列位于数据框中时,代码似乎按预期工作,即不会更改数据框的值。
我在 Jupyter 笔记本中的 AWS EMR PySpark 上运行。
dataframe.show()
产量
-+--------------------+----+--------------------+--------------------+----+--------------------+----+--------------------+----+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+-----+--------------------+--------------------+-----+--------------------+-------------------+-----+
|c_3| c_4| c_5| c_6| c_7| c_8| c_9| c_10| c_11| c_12| c_13| c_14| c_15| c_16| c_17| c_18| c_19| c_20| c_21| c_22| c_23| c_24| c_25| c_26| c_27| c_28| c_29| c_30| c_31| c_32| c_33| c_34| c_35| c_36| c_37| c_38|c_39|c_40|c_41|c_42|c_43|c_44|c_45|c_46|c_47|c_48|c_49| c_50| c_51| c_52| c_53| c_54| c_55| c_56| c_57| c_58| c_59| c_60| c_61| c_62| c_63| c_64| c_65| c_66| c_67| c_68| c_69| c_70| c_71| c_72| c_73| c_74|c_75|c_76| c_77|c_78|c_79| c_80| c_81|c_82|c_83|c_84| c_85| c_86|c_87| c_88| c_89|c_90| c_91|c_92| c_93|c_94| c_95| c_96| c_97| c_98| c_99| c_100| c_101|c_102| c_103| c_104|c_105| c_106| c_107|c_108|
+---+------+-----+-----+----+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+-------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+----+----+----+----+----+----+----+----+----+----+----+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+-------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+----+----+--------------------+----+----+--------------------+--------------------+----+----+----+--------------------+--------------------+----+--------------------+--------------------+----+--------------------+----+--------------------+----+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+-----+--------------------+--------------------+-----+--------------------+-------------------+-----+
|0.0| 526.0| 57.0| 44.0|13.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.03612167300380228|0.051330798479087454|0.030418250950570342| 0.26045627376425856| 0.18631178707224336| 0.04182509505703422|0.028517110266159693| 0.07034220532319392|0.043726235741444866| 0.06653992395437262| 0.10266159695817491|0.019011406844106463|0.017110266159695818| 0.03231939163498099|0.013307984790874524| 0.0| 0.0| 0.35361216730038025|0.011406844106463879| 0.13307984790874525| 0.49049429657794674| 0.0|0.003802281368821292|0.001901140684410646| 0| 1.0| 0.0| 1.0| 0.0| 1.0| 0.0| 1.0| 0.0| 0.0| 1.0| 0.0| 0.06273764258555133|0.009505703422053232| 0.0|0.001901140684410646|0.011406844106463879| 0.06653992395437262| 0.06273764258555133| 0.03612167300380228| 0.02091254752851711|0.003802281368821292| 0.0| 0.0|0.005703422053231939|0.003802281368821292| 0.0| 0.0|0.003802281368821292| 0.0| 0.0| 0.0|0.005703422053231939|0.001901140684410646|0.00190 .... etc.
正确。
但是发布 randomSplit:
train, test, validation = dataframe.randomSplit([0.6, 0.3, 0.1], 13)
train.show()
产量
+---+---+---+---+---+---+---+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
|c_3|c_4|c_5|c_6|c_7|c_8|c_9|c_10|c_11|c_12|c_13|c_14|c_15|c_16|c_17|c_18|c_19|c_20|c_21|c_22|c_23|c_24|c_25|c_26|c_27|c_28|c_29|c_30|c_31|c_32|c_33|c_34|c_35|c_36|c_37|c_38|c_39|c_40|c_41|c_42|c_43|c_44|c_45|c_46|c_47|c_48|c_49|c_50|c_51|c_52|c_53|c_54|c_55|c_56|c_57|c_58|c_59|c_60|c_61|c_62|c_63|c_64|c_65|c_66|c_67|c_68|c_69|c_70|c_71|c_72|c_73|c_74|c_75|c_76|c_77|c_78|c_79|c_80|c_81|c_82|c_83|c_84|c_85|c_86|c_87|c_88|c_89|c_90|c_91|c_92|c_93|c_94|c_95|c_96|c_97|c_98|c_99|c_100|c_101|c_102|c_103|c_104|c_105|c_106|c_107|c_108|
+---+---+---+---+---+---+---+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
|0.0|1.0|1.0|0.0|1.0|0.0|0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 1.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0| 0.0| 0.0| 1.0| 0.0| 1.0| 0.0| 1.0| 0.0| 0.0| 1.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 1.0|
|0.0|1.0|1.0|0.0|1.0|0.0|0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 1.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0| 0.0| 0.0| 1.0| 0.0| 1.0| 0.0| 1.0| 0.0| 0.0| 1.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 0.0| 1.0|... etc
我无法在任何地方找到有类似问题的人。
【问题讨论】:
【参考方案1】:我遇到了同样的问题。诀窍是权重列表中的权重。尝试将它们更改为 train, test, validation = dataframe.randomSplit([1.0, 1.0, 1.0])
之类的东西 - 它应该给你一个大约三个相等部分的切片数据框。尝试做类似的事情train test = df.randomSplit([0.6, 0.3,0.1], seed=42)
使用不同的种子值或尝试玩权重列表。
【讨论】:
以上是关于randomSplit pyspark 更改数据帧的值的主要内容,如果未能解决你的问题,请参考以下文章
在 pyspark 中,基于变量字段进行分组,并为特定值添加一个计数器(当变量更改时重置)