小编Sum*_*ing的帖子

如何编写 dplyr::filter 函数

dplyr过滤函数源代码,我无法得到,当我点击filter()时,源代码是UseMethod(),当我调试时,什么都没有出现;

我的测试代码:

过滤器(鸢尾花,萼片长度>7.1)

所以我尝试编写自己的函数

第一个版本:

   filter<-function(data,condition){
attach(data)
r<- data[which(condition,)]
detach(data)
return (r)
}
Run Code Online (Sandbox Code Playgroud)

它有效,当我使用 system.time() 比较 dplyr:filter 和 mine:filter 时,我的松散,比 dplyr 花费更多的时间;

第二个版本:

   filter<-function(data,condition){
r<-with(data,data[which(condition),])
return (r)
}
Run Code Online (Sandbox Code Playgroud)

它报告错误,未找到 Sepal.Length。

我知道是条件参数的问题,
如果我直接使用 with(irirs,irirs[which(Sepal.Length>7.1),]) ,它可以工作,但我需要一个自己的过滤器功能

我有两个问题:

  • 一种。如何编写有效的过滤器或修复我的第二个版本代码的问题。
  • 湾 如何读取函数源代码,如 usemethod("func")

多谢!

r dplyr

0
推荐指数
1
解决办法
149
查看次数

Spark 以字符串形式写入并将分区列以数字形式读取

我发现我的业务代码中有一些非法数据,经过调试,我发现这个错误是由spark分区解析引起的,我应该如何做才能避免这个问题而不更改写入分区列。

\n
import org.apache.spark.sql.functions.lit\nimport spark.implicits._\n\nval df = Seq(("122D", 2), ("122F", 2), ("122", 2))\n      .toDF("no", "value")\n      .withColumn("other", lit(1))\n\nval path = "/user/my/output"\n\ndf\n  .write\n  .partitionBy("no","value")\n  .parquet(path)\n
Run Code Online (Sandbox Code Playgroud)\n

我的预期结果是读为 aame 为 write

\n
df.show()\n+----+-----+-----+\n|  no|value|other|\n+----+-----+-----+\n|122D|    2|    1|\n|122F|    2|    1|\n| 122|    2|    1|\n+----+-----+-----+\n\n// df.distinct.count==3\n
Run Code Online (Sandbox Code Playgroud)\n

实际读取结果是这样的

\n
val read=spark.read.parquet(path)\n\nread.show()\n+-----+-----+-----+\n|other|   no|value|\n+-----+-----+-----+\n|    1|122.0|    2|\n|    1|122.0|    2|\n|    1|122.0|    2|\n+-----+-----+-----+\n\n// read.distinct.count==1\n\n
Run Code Online (Sandbox Code Playgroud)\n

检查output目录结构是这样的

\n
\xe2\x94\x94\xe2\x94\x80output\n    \xe2\x94\x9c\xe2\x94\x80no=122\n    \xe2\x94\x82  \xe2\x94\x94\xe2\x94\x80value=2\n    \xe2\x94\x9c\xe2\x94\x80no=122D\n    \xe2\x94\x82  \xe2\x94\x94\xe2\x94\x80value=2\n    \xe2\x94\x94\xe2\x94\x80no=122F\n        \xe2\x94\x94\xe2\x94\x80value=2\n
Run Code Online (Sandbox Code Playgroud)\n

非常感谢。\n我的 Spark 版本是2.4.5,scala 版本是2.11.12

\n

scala partition apache-spark parquet

0
推荐指数
1
解决办法
1572
查看次数

标签 统计

apache-spark ×1

dplyr ×1

parquet ×1

partition ×1

r ×1

scala ×1