我正在尝试从数据库中读取数百万行并写入文本文件.
这是我的问题数据库转储到带有副作用的文本文件的延续
我现在的问题似乎是在程序完成之前不会发生日志记录.我没有懒惰处理的另一个指标是在程序完成之前根本不写入文本文件.
基于一个IRC尖看来我的问题很可能具有做:result-set-fn,缺省值为doall在clojure.java.jdbc/query代码的区域.
我试图用一个for函数替换它,但仍然发现内存消耗很高,因为它将整个结果集拉入内存.
我怎么能有一个:result-set-fn不会把所有东西都拉进来的doall?如何在程序运行时逐步编写日志文件,而不是在-main执行完成后转储所有内容?
(let [
db-spec local-postgres
sql "select * from public.f_5500_sf "
log-report-interval 1000
fetch-size 100
field-delim "\t"
row-delim "\n"
db-connection (doto ( j/get-connection db-spec) (.setAutoCommit false))
statement (j/prepare-statement db-connection sql :fetch-size fetch-size )
joiner (fn [v] (str (join field-delim v ) row-delim ) )
start (System/currentTimeMillis)
rate-calc (fn [r] (float (/ r (/ ( - (System/currentTimeMillis) start) 100))))
row-count …Run Code Online (Sandbox Code Playgroud) 我需要为我正在构建的clojure应用程序配置文件.它们应该足够容易让用户在文本编辑器中进行修改,以方便我的程序读取.
我在想序列化的S-表情和使用吐放入到用户的home目录下的配置文件,但我想pprint我吐,所以它看起来有点更友好的人眼数据.
我如何在clojure中吐出pprint的输出?
在使用序列化的s表达式作为clojure中的配置文件时,我的思维过程是否正确?
谢谢,
连接到Netezza系统后有没有办法切换数据库?例如,在MSSQL中,可以发送命令use database_name以切换到database_name.
Netezza中有没有像mssql上的"use"一样的东西?
http://technet.microsoft.com/en-us/library/ms188366.aspx
我提出的问题是关于元数据查询; 我只能访问"当前连接的数据库"的_v_table.
我想知道是否有基于从“编辑”或“页面”模式中提取的文本的 mutt 索引中的“搜索”或“限制”。
我正在尝试为索引构建一个宏,按下该宏时会将索引限制为仅来自 ( ~f)From: .*$当前项目的正则表达式的邮件。
这将帮助我做的是查看来自特定发件人的所有消息的上下文......当人们不小心“中断线程”时,它也会有所帮助。
我希望它与此处讨论的 vim 类似,我可以从一个区域中提取文本,然后键入^R"以粘贴回“搜索”或“限制”提示符中。
我尝试制作一个宏来进入edit然后搜索 from 字符串,但我不知道如何将其粘贴回索引中的任何内容......
我一直在使用imran的很好的答案来展平嵌套的 Python 字典,压缩键,并试图想出一种方法来进一步展平可能位于字典项的列表值内的字典。(当然,因为我的数据通常来自 XML,这也可以是递归的......)
from pprint import pprint
from collections import MutableMapping
def flatten(d, parent_key='', sep='_'):
items = []
for k, v in d.items():
new_key = parent_key + sep + k if parent_key else k
if isinstance(v, MutableMapping):
items.extend(flatten(v, new_key, sep=sep).items())
else:
items.append((new_key, v))
return dict(items)
Run Code Online (Sandbox Code Playgroud)
给定一个d这样的字典:
d = {"a": 1,
"b": 2,
"c": {"sub-a": "one",
"sub-b": "two",
"sub-c": "thre"}}
Run Code Online (Sandbox Code Playgroud)
这很好用:
pprint(flatten(d))
{'a': 1,
'b': 2,
'c_sub-a': 'one', …Run Code Online (Sandbox Code Playgroud) 我多年来一直使用https://github.com/vim-scripts/increment.vim--Avadhanula for vim。
我如何在 emacs 中利用类似的功能?
这个想法是这样的:
给出如下列表:
the_array[0]
the_array[0]
the_array[0]
Run Code Online (Sandbox Code Playgroud)
我希望能够选择所有零,发出命令,并将文本替换为:
the_array[0]
the_array[1]
the_array[2]
Run Code Online (Sandbox Code Playgroud)
如果重要的话,我正在使用 emacs 邪恶模式,希望对我想要增加的数字区域执行相当于块选择的操作。
谢谢,
我对包装 Java 8 的 java.time api的clojure.java-time库用法的使用感到困惑。
我想要一个将字符串格式的日期从“yyyy-MM-dd'T'HH:mm:ss”格式转换为“MM/dd/YYYY hh:mm:ss a”格式的函数。
这是我的功能:
(require '[java-time :as jt])
(defn change-ds-format [in-ds]
{:pre [string? in-ds ]}
(let [input-format "yyyy-MM-dd'T'HH:mm:ss"
output-format "MM/dd/YYYY hh:mm:ss a"]
(->> in-ds
(jt/local-date-time input-format)
(jt/format output-format))))
Run Code Online (Sandbox Code Playgroud)
这看起来没问题:
(change-ds-format "2019-12-28T00:00:00" )
;=> "12/28/2019 12:00:00 AM"
Run Code Online (Sandbox Code Playgroud)
我不知道为什么要推迟到 2020 年?
(change-ds-format "2019-12-29T00:00:00" )
;=> "12/29/2020 12:00:00 AM"
;; Why is this one 2020 ???
Run Code Online (Sandbox Code Playgroud)
我想这可能是时区偏移问题,但我不相信它应该转移到 2020 年。
我正在努力获得正确的类型提示,以避免在从数据库查询写入文本文件输出时出现反射警告。
我试图在调用每个函数之前放置 ^String 类型提示,因为最终输出将命中磁盘上的文本文件。
反射警告发生在函数末尾的 :row-fn 行上。我Reflection warning, dbdump/dbdump.clj:157:44 - call to write can't be resolved.在同一行有评论。
我怎样才能摆脱这个警告?我认为在处理大型数据集时会产生性能成本。
(defn run-job [job-time-string db-spec config]
(let [; {{{
source-sql (str "select * from " (:source-base-name config)(:table-name config))
max-rows (:max-rows config)
fetch-size (:fetch-size config)
working-dir (:working-dir config)
output-name (str working-dir "/" job-time-string ".pipe" )
field-delim (:field-delim config)
row-delim (:row-delim config)
log-report-interval (:log-report-interval config)
row-count (atom 0) ; For state on rows
db-connection (doto (j/get-connection db-spec))
statement (j/prepare-statement db-connection source-sql :fetch-size fetch-size :concurrency …Run Code Online (Sandbox Code Playgroud) 在toolz项目中,有没有办法像函数一样对待对象方法,这样我就可以更好地进行组合、柯里化等?
我所说的更好是指可读性和类似的性能
这是一个简单的例子:
# given a list strings (names),
l = ["Harry" ,
"Sally " ,
" bEn " ,
" feDDy " ]
# Lets pretend I want to apply a few simple string methods on each item in the
# list (This is just an example), and maybe replace as it's multi-airity.
# Traditional python list comprehension:
print([x.strip().lower().title().replace('H','T') for x in l ])
['Tarry', 'Sally', 'Ben', 'Feddy']
# my attempt, at toolz, same question with compose, curry,
# …Run Code Online (Sandbox Code Playgroud) (我之前有一个问题在这里,并假设我不会遇到 core.async 问题)。
给定如下输入数据:
(require '[clojure.core.async :as a])
(def input-data
[{:itm_na 1 :seq_no 1 :doc_img "this is a very long "}
{:itm_na 1 :seq_no 2 :doc_img "sentence from a mainframe "}
{:itm_na 1 :seq_no 3 :doc_img "system that was built before i was "}
{:itm_na 1 :seq_no 4 :doc_img "born."}
{:itm_na 2 :seq_no 1 :doc_img "this is a another very long "}
{:itm_na 2 :seq_no 2 :doc_img "sentence from the same mainframe "}
{:itm_na 3 :seq_no 1 …Run Code Online (Sandbox Code Playgroud)