小编Eli*_*hle的帖子

Spark:将dataframe列与数组连接

我有两个带有两列的DataFrame

  • df1 与模式 (key1:Long, Value)

  • df2 与模式 (key2:Array[Long], Value)

我需要将这些DataFrame加入键列(在key1和之间找到匹配的值key2)。但是问题在于它们的类型不同。有没有办法做到这一点?

join apache-spark

7
推荐指数
2
解决办法
4077
查看次数

在 AWS CodePipeline 中运行 `npm ci` 失败:“无法读取未定义的属性‘aws-cdk-lib’”

npm ci在 AWS CodePipeline 中调用时,我遇到了一些奇怪的行为。

NPM文档建议使用npm ci(“全新安装”)而不是npm install在自动化环境中。AWS CDK 文档在其CDK 管道示例中遵循此建议:

const pipeline = new pipelines.CodePipeline(this, 'Pipeline', {
  synth: new pipelines.ShellStep('Synth', {
    ...
    commands: [
      'npm ci',
      'npm run build',
      'npx cdk synth',
    ],
  }),
});
Run Code Online (Sandbox Code Playgroud)

然而,当我尝试此操作时,我的管道在npm ci命令中失败,并出现奇怪的错误消息:

[Container] 2022/12/14 16:00:37 Running command npm ci
npm ERR! Cannot read property 'aws-cdk-lib' of undefined
Run Code Online (Sandbox Code Playgroud)

该包aws-cdk-lib是我的依赖项中的第一个条目package.json。所以看起来 CodeBuild 在通过安装时无法解析我的依赖项npm cinpm ci奇怪的是,当我替换为...时,一切正常npm install,但我想找到一种方法来使其与 …

amazon-web-services npm aws-codepipeline aws-codebuild aws-cdk

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

如何使用dict创建新的DataFrame

我有一个dict,例如:

cMap = {"k1" : "v1", "k2" : "v1", "k3" : "v2", "k4" : "v2"}
Run Code Online (Sandbox Code Playgroud)

和一个DataFrame A,例如:

+---+
|key|
+----
| k1|
| k2|
| k3|
| k4|
+---+
Run Code Online (Sandbox Code Playgroud)

使用代码创建上面的DataFame:

data = [('k1'),
    ('k2'),
    ('k3'),
    ('k4')]
A = spark.createDataFrame(data, ['key'])
Run Code Online (Sandbox Code Playgroud)

我想获取新的DataFrame,例如:

+---+----------+----------+
|key|   v1     |    v2    |
+---+----------+----------+
| k1|true      |false     |
| k2|true      |false     |
| k3|false     |true      |
| k4|false     |true      |
+---+----------+----------+
Run Code Online (Sandbox Code Playgroud)

我希望得到一些建议,谢谢!

pyspark

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

Matplotlib 的 FuncAnimation 多次调用 init_func

的文档matplotlib.animation.FuncAnimation说:

init_func : [...] 该函数将在第一帧之前调用一次。

但每当我使用 时FuncAnimation,都会init_func被多次调用。您可以通过向 Matplotlib 网站的基本示例添加打印语句来查看这一点:

"""
A simple example of an animated plot
"""
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

fig, ax = plt.subplots()

x = np.arange(0, 2*np.pi, 0.01)
line, = ax.plot(x, np.sin(x))


def animate(i):
    line.set_ydata(np.sin(x + i/10.0))  # update the data
    return line,


# Init only required for blitting to give a clean slate.
def init():

    # ---> Adding a print …
Run Code Online (Sandbox Code Playgroud)

python animation matplotlib

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

Python:按区间高效查找

我有一个很大的查找表,其中的键是一个间隔:

| min | max | value   |
|-----|-----|---------|
| 0   | 3   | "Hello" |
| 4   | 5   | "World" |
| 6   | 6   | "!"     |
| ... | ... | ...     |
Run Code Online (Sandbox Code Playgroud)

目标是创建一个查找结构my_lookup,根据整数所在的范围返回每个整数的值。例如:2 -> "Hello", 3 -> "Hello", 4 -> "World"

这是一个实现我想要的功能的实现:

d = {
  (0, 3): "Hello",
  (4, 5): "World",
  (6, 6): "!"
}

def my_lookup(i: int) -> str:
  for key, value in d.items():
    if key[0] <= i …
Run Code Online (Sandbox Code Playgroud)

python performance dictionary

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

Matplotlib:为左侧和右侧设置不同的边距

我知道如何增加两边的边距matplotlib

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots()
ax.set_xmargin(0.3)   

ax.plot(range(10), np.random.rand(10))
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

但是,我只想在右侧有一个边距:类似于ax.set_xmargin(left=0.0, right=0.3). 那可能吗?我无法手动设置轴限制,因为绘图是动画的,并且每一步数据都在变化。

python matplotlib

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

Python imaplib:正确显示非 ASCII 字符

我正在使用 Python 3.5 并imaplib从 GMail 获取电子邮件并打印其正文。正文包含非 ASCII 字符。这些以一种奇怪的方式“编码”,我不知道如何解决这个问题。

import email
import imaplib

c = imaplib.IMAP4_SSL('imap.gmail.com')
c.login('example@gmail.com', 'password')

c.select('Inbox')
_, data = c.fetch(b'12345', '(RFC822)')

mail = data[0][1]
message = email.message_from_bytes(mail)
payload = message.get_payload()

body = mail[0].as_string()
print(body)
Run Code Online (Sandbox Code Playgroud)

>> ... Mit freundlichen Gr=C3=BC=C3=9Fen ...
Run Code Online (Sandbox Code Playgroud)

而不是想要的

>> ... Mit freundlichen Grüßen ...
Run Code Online (Sandbox Code Playgroud)

在我看来,这不是编码问题,而是转换问题。但是我如何告诉 Python 正确转换字符呢?有没有更方便的图书馆?

python email character-encoding non-ascii-characters python-3.x

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

使用 Matplotlib 绘制滚动窗口

我想在while循环中绘制一个时间序列作为滚动窗口:图表应始终显示 10 个最近的观察结果。

我的想法是使用双端队列对象maxlen=10在每一步绘制。令我大吃一惊的是,该图新值附加到旧图上;显然它会记住不再在双端队列中的值!为什么会这样,我该如何关闭它?

在此处输入图片说明

这是我正在尝试做的一个最小的例子。绘图部分基于这篇文章(虽然plt.ion()对我没有任何改变,所以我把它省略了):

from collections import deque
import matplotlib.pyplot as plt
import numpy as np

x = 0
data = deque(maxlen=10)

while True:
    x += np.abs(np.random.randn())
    y = np.random.randn()
    data.append((x, y))

    plt.plot(*zip(*data), c='black')
    plt.pause(0.1)
Run Code Online (Sandbox Code Playgroud)

我也尝试使用 Matplotlib 的动画函数,但无法弄清楚如何在无限while循环中做到这一点......

python matplotlib

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

PySpark:OneHotEncoder 的输出看起来很奇怪

星火文档包含一个PySpark例如OneHotEncoder

from pyspark.ml.feature import OneHotEncoder, StringIndexer

df = spark.createDataFrame([
    (0, "a"),
    (1, "b"),
    (2, "c"),
    (3, "a"),
    (4, "a"),
    (5, "c")
], ["id", "category"])

stringIndexer = StringIndexer(inputCol="category", outputCol="categoryIndex")
model = stringIndexer.fit(df)
indexed = model.transform(df)

encoder = OneHotEncoder(inputCol="categoryIndex", outputCol="categoryVec")
encoded = encoder.transform(indexed)
encoded.show()
Run Code Online (Sandbox Code Playgroud)

我希望该列categoryVec看起来像这样:

[0.0, 0.0]
[1.0, 0.0]
[0.0, 1.0]
[0.0, 0.0]
[0.0, 0.0]
[0.0, 1.0]
Run Code Online (Sandbox Code Playgroud)

categoryVec实际上看起来是这样的:

(2, [0], [1.0])
    (2, [], [])
(2, [1], [1.0])
(2, [0], [1.0])
(2, [0], [1.0])
(2, …
Run Code Online (Sandbox Code Playgroud)

apache-spark pyspark apache-spark-mllib one-hot-encoding

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