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
Apache spark 筛选新列上的Spark数据帧_Apache Spark_Pyspark_Apache Spark Sql_Pyspark Sql - Fatal编程技术网

Apache spark 筛选新列上的Spark数据帧

Apache spark 筛选新列上的Spark数据帧,apache-spark,pyspark,apache-spark-sql,pyspark-sql,Apache Spark,Pyspark,Apache Spark Sql,Pyspark Sql,上下文:我有一个数据集太大,无法放入内存,我正在训练Keras RNN。我正在AWS EMR集群上使用PySpark对模型进行批量训练,这些训练足够小,可以存储在内存中。我无法使用elephas实现分布式模型,我怀疑这与我的模型是有状态的有关。不过我不完全确定 dataframe为每个用户都有一行,从安装之日起的天数从0到29。查询数据库后,我对dataframe执行了许多操作: query=最长运行天数为 选择用户id, 最长天数作为最长天数 从桌子上 按用户id分组 选择表格* 从桌子上 使

上下文:我有一个数据集太大,无法放入内存,我正在训练Keras RNN。我正在AWS EMR集群上使用PySpark对模型进行批量训练,这些训练足够小,可以存储在内存中。我无法使用elephas实现分布式模型,我怀疑这与我的模型是有状态的有关。不过我不完全确定

dataframe为每个用户都有一行,从安装之日起的天数从0到29。查询数据库后,我对dataframe执行了许多操作:

query=最长运行天数为 选择用户id, 最长天数作为最长天数 从桌子上 按用户id分组 选择表格* 从桌子上 使用用户id的左外部联接最长运行天数 其中max_de=1 并且经过的天数小于1天 df=read_from_dbquery这只是一个查询数据库的自定义函数 创建特征向量列 汇编器=向量汇编器输入=特征\u列表,输出=特征 df_vectoried=assembler.transformdf 将用户分为培训、测试和分配批号 udf_randint=udflambda x:np.random.randint0,x,IntegerType 培训用户,测试用户=df矢量化。选择用户id.distinct.randomSplit[0.8,0.2],123 training_users=training_users.with ColumnBatch_编号、udf_和Intlitn_批次 创建和排序训练和测试数据帧 train=df\u矢量化。jointraining\u用户,[用户id],内部。选择[用户id,已用天数,批次号,功能,kpi1,kpi2,kpi3] train=train.sort[用户id,运行天数] 测试=df_矢量化。联合测试_用户,[用户id],内部。选择[用户id,已用天数,功能,kpi1,kpi2,kpi3] test=test.sort[用户id,已用天数] 我遇到的问题是,如果不缓存序列,我似乎无法对批次号进行过滤。我可以筛选数据库中原始数据集中的任何列,但不能筛选查询数据库后在pyspark中生成的任何列:

这个:train.filtertrain[days\u appeased]==0.selectdays\u appeased.distinct.show仅返回0

但是,所有这些都返回0到9之间的所有批号,而不进行任何筛选:

train.filtertrain[批次号]==0.选择批次号.distinct.show train.filtertrain.batch\u number==0。选择batch\u number.distinct.show train.filterbatch\u number=0。选择Batch\u number.distinct.show train.filtercolbatch\u number==0.selectbatch\u number.distinct.show 这也不起作用:

train.createOrReplaceTempViewtrain_表 批次号df=spark.sqlSELECT*自批次号=1的列号表 batch\u df.选择batch\u number.distinct.show 如果我先训练的话,所有这些都会起作用。这是绝对必要的,还是有一种不用缓存的方法可以做到这一点?

Spark>=2.3?-取决于SPARK-22629的进度

应该可以使用非确定性方法禁用某些优化

火花<2.3

不要使用自定义项生成随机数。首先,请引述:

用户定义的函数必须是确定性的。由于优化,可以消除重复调用,或者调用函数的次数甚至可能超过查询中的次数

即使不是UDF,在处理单个记录时,也存在一些火花,这使得几乎不可能实现这一权利

Spark已经提供:

从U[0.0,1.0]中生成具有独立且相同分布的i.i.d.样本的随机列

从标准正态分布生成具有独立且分布相同的i.i.d.样本的列

可用于构建更复杂的生成器函数

注:

您的代码可能存在其他一些问题,但这从一开始就不可接受。

Spark>=2.3?-取决于SPARK-22629的进度

应该可以使用非确定性方法禁用某些优化

火花<2.3

不要使用自定义项生成随机数。首先,请引述:

用户定义的函数必须是确定性的。由于优化,可以消除重复调用,或者调用函数的次数甚至可能超过查询中的次数

即使不是UDF,在处理单个记录时,也存在一些火花,这使得几乎不可能实现这一权利

Spark已经提供:

从U[0.0,1.0]中生成具有独立且相同分布的i.i.d.样本的随机列

从标准正态分布生成具有独立且分布相同的i.i.d.样本的列

可用于构建更复杂的生成器函数

注:

您的代码可能存在其他一些问题,但这从一开始就不可接受