小编chb*_*own的帖子

mongoDB map/reduce减去reduce

我有一些25k文件(原始json中为4 GB)的数据,我想执行一些javascript操作,使我的终端数据使用者(R)更容易访问,我想对这些更改进行"版本控制"通过为每个更改添加一个新集合,但我无法弄清楚如何map/reduce没有reduce.我想要一对一的文档映射 - 我开始使用25,356个文档collection_1,我希望最终得到25,356个文档collection_2.

我可以用这个来破解它:

var reducer = function(key, value_array) {
    return {key: value_array[0]}
}
Run Code Online (Sandbox Code Playgroud)

然后把它称为:

db.flat_1.mapReduce(mapper, reducer, {keeptemp: true, out: 'flat_2'})
Run Code Online (Sandbox Code Playgroud)

(我的映射器只调用一次发射,一个字符串作为第一个参数,最后一个文件作为第二个参数.它是我真正想要的那些第二个参数的集合.)

但这似乎很尴尬,我不知道它为什么会起作用,因为emit我的mapper中的调用参数不等于我的返回参数reducer.另外,我最终得到了一份文件

{
    "_id": "0xWH4T3V3R", 
    "value": {
        "key": {
            "finally": ["here"],
            "thisIsWhatIWanted": ["Yes!"]
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这似乎没必要.

此外,执行自己的插入的游标甚至不到十分之一mapReduce.我不太了解MongoDB对它进行基准测试,但我猜它会50x慢一些.有没有办法并行运行游标?我不在乎我的文件是否与其中的文件collection_2顺序不同collection_1.

mongodb

18
推荐指数
2
解决办法
8478
查看次数

在终端中留下tmux回滚(iTerm2)

通常tmux只显示与终端当前显示的行数相同的输出.然后当我分离它时,它会清除所有内容.我知道如何看待回溯(ctrl+A,[,k,...),但我怎么可以配置TMUX只打印了所有输出终端,因为如果我不使用它呢?

我喜欢tmux因为我很难记住nohup某些任务,并且因为它使查看长时间运行作业的输出变得更容易.不过,我想能够更自然地查看其回溯,通过简单地滚动回在iTerm2.

或者,如果有办法做到这一点screen,我也可以使用它.

ssh gnu-screen tty iterm tmux

17
推荐指数
2
解决办法
9403
查看次数

Scala Vector折叠语法(/:和:\和/:\)

有人可以提供一些例子

/: :\/:\

实际上习惯了?我假设它们是reduce/fold方法的快捷方式,但是没有关于它们如何在Scala文档中实际使用的示例,并且它们无法在StackOverflow上进行谷歌/搜索.

syntax scala fold

15
推荐指数
2
解决办法
2862
查看次数

午夜后刷新iOS UIDatePicker的内部状态

我正在编写一个iPhone应用程序(Swift 4.0,iOS 10.3.3,Xcode 9.2),UIViewController其中包含一个主UIDatePicker模式,其默认模式为默认模式UIDatePickerMode.dateAndTime.用户旨在使应用程序在后台运行(尽管这不是必需的),并且有时打开它,选择特定的日期和时间,然后单击按钮.

我的问题是,当应用程序在最初启动后的一天(或几天)重新打开时,微调器的日期部分上的时间敏感标签,即"今天"和"昨天",不会得到更新.留在后台.

这意味着,在使用一天左右后,UI可能会处于混乱或不一致状态.例如,这是1月19日的截图:

带有错误

它设法将"昨天"线重新描绘为"1月17日星期三",但没有将"今天"改为"昨天"或"1月19日星期五"为"今天".

另一个,从今天中午1月22日中午左右开始(选定的值是1月21日上午9点29分):

带有错误

"昨天"是正确的,但"今天"不见了.

有时陈旧的标签就会堆积起来,就像1月14日这个镜头一样(选定值是1月15日10:47 PM):

带有多个陈旧

如果我强制退出并重新启动应用程序,一切看起来都是新鲜和正确的,但我想避免这样做.

我试着打电话setNeedsDisplay()UIDatePicker时候实例viewWillAppear被调用,以及一旦NotificationCenter触发.UIApplicationWillEnterForeground事件,但没有成功:(.

大多数控件没有内部状态,这取决于当前时间,所以我想这不会经常出现.但在这种情况下,我的选择是什么?

如何触发UIDatePicker控件的完全刷新?


SO上似乎有三个类似的问题:


编辑:现在是1月23日,午夜过后5分钟.我试过了什么:

  1. setNeedsDisplay()每当视图出现/应用程序进入前景时调用UIDatePicker(我将在"刷新时"调用它).上面的观察/截图都是在这种情况下拍摄的.在我添加之前我遇到了同样的问题setNeedsDisplay(),我没有注意到行为的任何变化,但在添加之前我并没有那么分析.陈旧标签是有和没有的问题setNeedsDisplay().
  2. .date = ...直接在"刷新时" 设置字段(使用与viewDidLoad最初调用时相同的存储日期).这没有直接影响(目前的日期是1月23日):

    带有错误

    但更新了底层(?!)(这里我主动中间滚动):

  3. 我实际上在同一个视图上有两个UIDatePickers,所以我也可以通过测试设置日期.setDate(..., animated: true),效果好一点 - "1月22日"成为"昨天",但没有"今天"日期("Jan" 23"遗骸"1月23日"):

    爆炸新闻!大约30分钟后(上午12:35),在重新开启应用程序并重新打开应用程序后,标签再次发生变化.在.date …

iphone uidatepicker uikit ios swift

9
推荐指数
1
解决办法
406
查看次数

使用ScriptingBridge时隐藏Python火箭停靠图标

我正在使用ScriptingBridge检索当前在iTunes,Mac OS X中播放的曲目.

from ScriptingBridge import SBApplication
iTunes = SBApplication.applicationWithBundleIdentifier_("com.apple.iTunes")
print iTunes.currentTrack().name()
Run Code Online (Sandbox Code Playgroud)

但是,当我运行最后一行,实际获取轨道名称时,一个应用程序出现在Dock中,并且在我关闭我的Python程序之前不会离开,无论我是在REPL中运行还是作为脚本运行.图标就是这个,至少在我的机器上:

/System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/Resources/PythonInterpreter.icns
Run Code Online (Sandbox Code Playgroud)

该脚本运行良好,我可以通过SB从iTunes获取所需的所有信息.我只想保持图标弹出.为什么该特定方法调用会调用停靠图标?

python macos itunes dock osx-mountain-lion

5
推荐指数
1
解决办法
1601
查看次数

Clojure:idiomatic更新地图的值如果密钥存在

这是我的问题:我想要一个helpme带有地图:r:g用空向量替换的函数,当且仅当这些键存在时.例如:


输入:

(helpme {:a "1" :r ["1" "2" "3"] :g ["4" "5"]})
Run Code Online (Sandbox Code Playgroud)

输出:

{:a "1" :r [] :g []}
Run Code Online (Sandbox Code Playgroud)

输入:

(helpme {:a "1" :r ["1" "2" "3"]})
Run Code Online (Sandbox Code Playgroud)

输出:

{:a "1" :r []}
Run Code Online (Sandbox Code Playgroud)

我可以定义一个功能"helpme"来做到这一点,但它过于复杂,我觉得必须有一个更容易(更惯用)的方式......

这是我完成的过于复杂的方式,如下所述:

(defn c [new-doc k] (if (contains? new-doc k) (assoc new-doc k []) new-doc))
(defn helpme [new-doc] (c (c new-doc :r) :g))
Run Code Online (Sandbox Code Playgroud)

dictionary key clojure

4
推荐指数
2
解决办法
2818
查看次数

使 Clojure 的 defprotocol 与现有函数一起玩得很好(多态)

我如何编写一个defprotocol(并defrecord实现它)来声明一个与现有函数同名的方法,并动态分派到协议/记录的方法,如果我用协议/记录的实例调用它,否则分派到现有的功能?

例如,我想创建一个支持基本算术的几何助手(在这个例子中只是乘法,以保持简短):

(defprotocol SizeOps
  (* [this factor] "Multiply each dimension by factor and return a new Size"))
Run Code Online (Sandbox Code Playgroud)

在这一点上,我已经从编译器那里得到了一些不祥的预感:

警告:协议#'user/SizeOps 正在覆盖函数 *
警告:* 已经引用:#'clojure.core/* 在命名空间中:user,被替换为:#'user/*

然后实现:

(defrecord Size [width height]
  SizeOps
  (* [this factor] (Size. (* width factor) (* height factor))))
Run Code Online (Sandbox Code Playgroud)

编译没问题,但是当我尝试使用它时,它唯一*知道的是我的协议中的那个:

(* (Size. 1 2) 10)
Run Code Online (Sandbox Code Playgroud)

IllegalArgumentException 没有方法的实现::* of protocol: #'user/SizeOps found for class: java.lang.Long

我可以通过*在我的实现中完全指定核心函数来解决这个问题:

(defrecord Size [width height]
  SizeOps
  (* [this factor] (Size. (clojure.core/* width factor) (clojure.core/* height …
Run Code Online (Sandbox Code Playgroud)

operator-overloading clojure clojurescript

4
推荐指数
1
解决办法
731
查看次数