小编Jos*_*ine的帖子

PyODBC:即使它存在也无法打开驱动程序

我是linux世界的新手,我想从Python查询Microsoft SQL Server.我在Windows上使用它,它非常好,但在Linux中它非常痛苦.

几个小时后,我终于成功使用unixODBC在Linux Mint上安装Microsoft ODBC驱动程序.

然后,我用python 3环境设置了一个anaconda.

然后我这样做:

import pyodbc as odbc

sql_PIM = odbc.connect("Driver={ODBC Driver 13 for SQL Server};Server=XXX;Database=YYY;Trusted_Connection=Yes")
Run Code Online (Sandbox Code Playgroud)

它返回:

('01000', "[01000] [unixODBC][Driver Manager]Can't open lib '/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0' : file not found (0) (SQLDriverConnect)")
Run Code Online (Sandbox Code Playgroud)

我没有遗忘的是,PyODBC似乎从odbcinst.ini读取了正确的文件路径,但仍然不起作用.

我去了"/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0",文件确实存在!

那为什么它告诉我它不存在?以下是一些可能的线索:

  • 我在虚拟环境中
  • 我需要拥有"读取"权限,因为它是根文件路径

我不知道如何解决这些问题.

谢谢 !

python linux sql-server unixodbc pyodbc

21
推荐指数
2
解决办法
1万
查看次数

Clojure:Group-by太慢(1300万行文件)

情况

我有一个1300万行CSV,我想为每个组执行逻辑回归(incanter).我的文件是这样的(值只是样本)

ID Max Probability
1  1   0.5 
1  5   0.6
1  10  0.99
2  1   0.1
2  7   0.95
Run Code Online (Sandbox Code Playgroud)

所以我首先用csv阅读器阅读它,永远很好.

我有类似的东西:

( {"Id" "1", "Max" 1, "Probability" 0.5} {"Id" "1", "Max" 5, "Probability" 0.6} etc.
Run Code Online (Sandbox Code Playgroud)

我希望通过Id分组这些值,如果我没记错的话,那里有大约1.2百万的ID.(我用Python做了大熊猫,速度非常快)

这是我读取和格式化文件的功能(它适用于较小的数据集):

  (defn read-file
  []
    (let [path (:path-file @config)
          content-csv (take-csv path \,)]
      (->> (group-by :Id content-csv)
           (map (fn [[k v]]
                [k {:x (mapv :Max v) :y (mapv :Probability v)}]))
           (into {}))))
Run Code Online (Sandbox Code Playgroud)

我想最后有类似的东西来执行逻辑回归(我很灵活,不需要向量:x和:y,seqs都可以)

{"1" {:x [1 5 10] :y [0.5 0.6 0.99]} "2" {:x …
Run Code Online (Sandbox Code Playgroud)

group-by clojure incanter

6
推荐指数
1
解决办法
475
查看次数

Clojure:有没有理由详细说明函数定义中的arities?

我目前正在编写具有未定义数量的arities的函数,所以我在clojure.core中寻找示例等等.

这是例如comp(clojure.core)的定义

(defn comp
  "Takes a set of functions and returns a fn that is the composition
  of those fns.  The returned fn takes a variable number of args,
  applies the rightmost of fns to the args, the next
  fn (right-to-left) to the result, etc."
  {:added "1.0"
   :static true}
  ([] identity)
  ([f] f)
  ([f g] 
     (fn 
       ([] (f (g)))
       ([x] (f (g x)))
       ([x y] (f (g x y)))
       ([x y z] (f (g x y z)))
       ([x …
Run Code Online (Sandbox Code Playgroud)

clojure arity

3
推荐指数
1
解决办法
78
查看次数

Clojure:为什么这个宏不起作用?

我正在用基本示例探索宏,但我不明白它是如何工作的。

这个 :

(defmacro evalf [f v]
  (f v))
(evalf + 2)
Run Code Online (Sandbox Code Playgroud)

不起作用。

我试过 :

(defmacro evalf [f v]
  '(f v))
(evalf + 2)
Run Code Online (Sandbox Code Playgroud)

没运气...

我不明白其他语法:~ ~@ 等等,但它们也不起作用。我看到符号 f 没有指向 + 但我不知道说“取 f 的值是 +”。

你能说得更清楚吗?提前致谢

macros clojure

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

clojure是"多线程"吗?

我的问题可能看起来很奇怪,但我认为我面临的是volatile对象问题.

我写了一个像这样实现的库(只是一个方案,而不是真正的内容):

(def var1 (volatile! nil))
(def var2 (volatile! nil))

(def do-things [a]
 (vreset! var1 a)
 (vswap! var2 (inc @var2))
 {:a @var1 :b @var2})
Run Code Online (Sandbox Code Playgroud)

所以我有全局var,它由外部值初始化,其他的是计算的,我返回它们的内容.我使用volatile来获得比使用原子更快的速度,而不是每次为每次计算重新定义一个新的var.

问题是这在实践中似乎失败了,因为我map对一个集合(在另一个程序中)做了一些事情,偶尔会对这个函数进行内部子调用,比如(伪代码):

(map 
  (fn [x] 
    (let [analysis (do-things x)] 
      (if blabla 
          (do-things (f x)) 
          analysis)))) coll)
Run Code Online (Sandbox Code Playgroud)

内部条件调用会在引擎盖下产生另一个线程吗?似乎是的,因为有些人称之为工作,有时则不然.除了在每个do-things身体内部定义挥发物之外还有其他方法吗?

编辑

实际上错误是另一回事,但问题仍然存在:这是一种可接受/安全的方式,没有任何显式调用多线程功能吗?

multithreading clojure volatile

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