在 Python 3.6 的格式化字符串结果中包含一对反斜杠时遇到一些问题。请注意,#1 和 #2 产生相同的不需要的结果,但 #3 会产生太多反斜杠,这是另一个不需要的结果。
t = "arst '{}' arst"
t.format(d)
>> "arst '2017-34-12' arst"
Run Code Online (Sandbox Code Playgroud)
t = "arst \'{}\' arst"
t.format(d)
>> "arst '2017-34-12' arst"
Run Code Online (Sandbox Code Playgroud)
t = "arst \\'{}\\' arst"
t.format(d)
>> "arst \\'2017-34-12\\' arst"
Run Code Online (Sandbox Code Playgroud)
我正在寻找如下所示的最终结果:
>> "arst \'2017-34-12\' arst"
Run Code Online (Sandbox Code Playgroud) 我想从S3将多个实木复合地板文件读取到一个数据帧中。目前,我正在使用以下方法执行此操作:
files = ['s3a://dev/2017/01/03/data.parquet',
's3a://dev/2017/01/02/data.parquet']
df = session.read.parquet(*files)
Run Code Online (Sandbox Code Playgroud)
如果所有文件都存在于S3上,则此方法有效,但是当列表中的某些文件不存在时,我想请求将文件列表加载到数据帧中而不会中断。换句话说,我希望sparkSql可以将它找到的尽可能多的文件加载到数据帧中,并返回此结果而不会抱怨。这可能吗?
该阶文档具有一个代码示例,其包括下面的行:
val numberFunc = numbers.foldLeft(List[Int]())_
Run Code Online (Sandbox Code Playgroud)
方法调用后的下划线是什么意思?
我无法简单地pip install pandas因为我的系统已经为python3安装了它.但我预计pip会尝试安装python2; pip3应该安装python3.
为什么我必须指定要使用的python2解释器pip?
? ~ pip install pandas
Requirement already satisfied: pandas in /usr/local/lib/python3.5/site-packages
Requirement already satisfied: numpy>=1.7.0 in /usr/local/lib/python3.5/site-packages (from pandas)
? ~ python2 -m pip install pandas
Collecting pandas
Downloading pandas-0.19.2-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (11.9MB)
...
Run Code Online (Sandbox Code Playgroud) 我有一组N维向量.
data = np.array([[5, 6, 1], [2, 0, 8], [4, 9, 3]])
In [1]: data
Out[1]:
array([[5, 6, 1],
[2, 0, 8],
[4, 9, 3]])
Run Code Online (Sandbox Code Playgroud)
我正在使用sklearn pairwise_distances函数来计算距离值矩阵.注意,该矩阵关于对角线是对称的.
dists = pairwise_distances(data)
In [2]: dists
Out[2]:
array([[ 0. , 9.69535971, 3.74165739],
[ 9.69535971, 0. , 10.48808848],
[ 3.74165739, 10.48808848, 0. ]])
Run Code Online (Sandbox Code Playgroud)
我需要与该矩阵中的前N个值dists对应的索引,因为这些索引将对应于data表示它们之间距离最大的向量的成对索引.
我试着np.argmax(np.max(distances, axis=1))去获取每一行中最大值的索引,并np.argmax(np.max(distances, axis=0))获得每列中最大值的索引,但请注意:
In [3]: np.argmax(np.max(dists, axis=1))
Out[3]: 1
In [4]: np.argmax(np.max(dists, axis=0))
Out[4]: 1
Run Code Online (Sandbox Code Playgroud)
和:
In [5]: dists[1, 1] …Run Code Online (Sandbox Code Playgroud) 我正在阅读Scala中的Functional Programming一书中的一些代码示例(但我的问题与FP无关). https://github.com/fpinscala/fpinscala/blob/master/answers/src/main/scala/fpinscala/state/State.scala
我有关于以下行的Scala语法问题:
val int: Rand[Int] = _.nextInt
Run Code Online (Sandbox Code Playgroud)
从这个摘录:
trait RNG {
def nextInt: (Int, RNG) // Should generate a random `Int`. We'll later define other functions in terms of `nextInt`.
}
object RNG {
case class Simple(seed: Long) extends RNG {
def nextInt: (Int, RNG) = {
val newSeed = (seed * 0x5DEECE66DL + 0xBL) & 0xFFFFFFFFFFFFL // `&` is bitwise AND. We use the current seed to generate a new seed.
val nextRNG = Simple(newSeed) // The …Run Code Online (Sandbox Code Playgroud) 我有两个数据集:Dataset[User]和Dataset[Book]其中两个User和Book区分类别。我像这样加入他们:
val joinDS = ds1.join(ds2, "userid")
如果我尝试map遍历 中的每个元素joinDS,编译器会抱怨缺少编码器:
not enough arguments for method map: (implicit evidence$46: org.apache.spark.sql.Encoder[Unit])org.apache.spark.sql.Dataset[Unit].
Unspecified value parameter evidence$46.
Unable to find encoder for type stored in a Dataset.
但是如果我使用foreach而不是map. 为什么也不foreach需要编码器?我已经从 spark 会话中导入了所有隐式,那么map当数据集是连接包含案例类的两个数据集的结果时,为什么根本需要编码器)?另外,我从那个连接中得到什么类型的数据集?它是一个Dataset[Row],还是别的什么?
scala apache-spark apache-spark-dataset apache-spark-encoders
我试图从包含大约300万个json序列化对象的文件中加载数据集.每个对象都是一个包含各种类型的大型嵌套字典 - 整数,浮点数,列表和其他字典.
磁盘上文件的大小约为60GB.我有超过128GB的内存,所以我应该能够将整个内存放入内存中.但是,当我使用以下代码将数据加载到大型字典中时,已使用内存的大小增加到至少110GB(它甚至可能会变大但我在脚本增长之前就停止了.)
什么可以解释我在尝试加载此数据时看到的内存开销?为什么60GB磁盘会在内存中转换为110GB或更多?据我所知,这里唯一的开销应该是为对象创建列表容器,以及在结果字典中为这些列表分配一个键名.这不可能占据数据本身几乎两倍的内存 - 可以吗?
def load_by_geohash(file, specificity=7):
results = defaultdict(list)
filename = os.path.join(DATADIR, file)
with open(filename, 'r') as f:
updates = (json.loads(line) for line in f)
for update in updates:
geo_hash = update['geohash'][:specificity]
results[geo_hash].append(update)
return results
Run Code Online (Sandbox Code Playgroud) 我有一些python脚本花费的时间超出了我的预期,所以我开始调查并发现了python性能的一些惊喜.大多数情况下,它似乎围绕着reduce,但我不明白为什么.
为了实验,我写了以下两个模块:
py.py
from functools import reduce
def mysum(n):
return reduce(lambda acc, x: acc + x, range(n + 1))
n = int(1e8)
print(mysum(n))
Run Code Online (Sandbox Code Playgroud)
和
clj.clj
(defn mysum [n]
(reduce + (range (inc n))))
(println (mysum 1e8))
Run Code Online (Sandbox Code Playgroud)
我比较了他们的表现time:
? ~ time python py.py
5000000050000000
python py.py 21.90s user 0.41s system 95% cpu 23.344 total
? ~ time lumo clj.clj
5000000050000000
lumo clj.clj 2.44s user 0.13s system 102% cpu 2.519 total
Run Code Online (Sandbox Code Playgroud)
看起来python的执行速度比clojure实现慢10倍.但这与我的预期相反.
即使使用JVM运行clj文件,这会导致很大的启动成本,python也会超过一英里:
? ~ time clj clj.clj …Run Code Online (Sandbox Code Playgroud) 怎么会这样:
List(1,2,3).zipWithIndex.map((tup) => tup match {case (v, i) => if (i == 1) 777 else v})
Run Code Online (Sandbox Code Playgroud)
可以简化为:
List(1,2,3).zipWithIndex.map({case (v, i) => if (i == 1) 777 else v})
Run Code Online (Sandbox Code Playgroud)
换句话说,如何用{}块代替函数?{}当从未指定它应该这样做时,scala如何指示对块的输入执行匹配?到底究竟是什么{}块?
ElixirRegex基于Erlang:re模块,该模块在其文档中指出
Perl 支持字符类的 Posix 表示法。这使用由 [: 和 :] 括在方括号内的名称。PCRE 也支持这种表示法。
POSIX 字符类可以用\p操作符 à la Unicode Properties或括号类表示法表示,如此处和:re文档中所述。
然而,这些是我在使用 Elixir 1.9 的系统上看到的结果:
iex(1)> Regex.run(~r/\p{L}+/, "Götterfunken")
[<<71, 195>>]
Run Code Online (Sandbox Code Playgroud)
我希望上面的内容匹配搜索词中的所有字符。
iex(2)> Regex.run(~r/[[:alpha:]]+/, "Götterfunken")
[<<71, 195>>]
Run Code Online (Sandbox Code Playgroud)
同样,我希望所有字符都匹配,但我不确定是否:alpha:应该匹配非拉丁字符。
iex(3)> Regex.run(~r/[[:punct:]]/, "Götterfunken")
[<<182>>]
Run Code Online (Sandbox Code Playgroud)
在这里,我预计根本没有比赛。
这是 Elixir 中损坏的 Regex 实现,还是我无法理解正确的用法?
python ×6
scala ×4
python-3.x ×3
apache-spark ×2
arrays ×1
clojure ×1
elixir ×1
matrix ×1
numpy ×1
pip ×1
pyspark ×1
pyspark-sql ×1
python-3.6 ×1
regex ×1