Apache spark 将列值用作spark DataFrame函数的参数
考虑以下数据帧: +---+--+ |信| rpt| +---+--+ |X | 3| |Y | 1| |Z | 2| +---+--+ 可以使用以下代码创建: df=spark.createDataFrame[X,3,Y,1,Z,2],[letter,rpt] 假设我想按列rpt中指定的次数重复每一行,如下所示 一种方法是使用以下pyspark sql查询将我的问题复制到该问题: 查询= 挑选* 从…起 选择DISTINCT*, PosSplitRepeat,,rpt,AS index,col 从df作为 其中索引>0 query=query.replace\n,用空格替换换行符,避免EOF错误 spark.sqlquery.dropcol.sort'letter',index.show +---+--+---+ |字母| rpt |索引| +---+--+---+ |X | 3 | 1| |X | 3 | 2| |X | 3 | 3| |Y | 1 | 1| |Z | 2 | 1| |Z | 2 | 2| +---+--+---+ 这是有效的,并产生正确的答案。但是,我无法使用DataFrame API函数复制此行为 我试过: 导入pyspark.sql.f函数 选择 f、 posexplodef.splitf.repeat、、f.colrpt、、别名索引、列 显示 但这导致: TypeError:“列”对象不可调用 为什么我可以将该列作为输入传递给查询中的重复项,但不能从API传递?有没有办法使用spark DataFrame函数复制此行为?一个选项是使用,它允许您使用列值作为spark sql函数的输入 基于@user8371915,我发现以下方法有效: 从pyspark.sql.functions导入expr 选择 '*', expr'posexplodesplitrepeat,,rpt',别名索引,列 .where'index>0.dropcol.sort'letter',index.show +---+--+---+ |字母| rpt |索引| +---+--+---+ |X | 3 | 1| |X | 3 | 2| |X | 3 | 3| |Y | 1 | 1| |Z | 2 | 1| |Z | 2 | 2| +---+--+---+Apache spark 将列值用作spark DataFrame函数的参数,apache-spark,pyspark,apache-spark-sql,pyspark-sql,Apache Spark,Pyspark,Apache Spark Sql,Pyspark Sql,考虑以下数据帧: +---+--+ |信| rpt| +---+--+ |X | 3| |Y | 1| |Z | 2| +---+--+ 可以使用以下代码创建: df=spark.createDataFrame[X,3,Y,1,Z,2],[letter,rpt] 假设我想按列rpt中指定的次数重复每一行,如下所示 一种方法是使用以下pyspark sql查询将我的问题复制到该问题: 查询= 挑选* 从…起 选择DISTINCT*, PosSplitRepeat,,rpt,AS index,col
f、 exprrepeat,,rpt而不是f.repeat,,f.colrpt?@user8371915 df.选择“*”,f.expr'posexplodesplitrepeat,,rpt',.aliasindex,col.where'index>0.dropcol.sort'letter',index.show works。您知道这是否是将列用作参数的唯一方法吗?为什么它在SQL语法中工作?@ USER 831915请考虑将您的建议作为答案,并且可以从我的问题中编辑它。我认为这对将来的其他人是有益的。