对于我正在进行的个人项目,我想在Steam,Impulse,EA Origins和其他几个站点上制作游戏价格线图.目前,我已经修改了SteamCalculator.com使用的脚本,以记录每个国家/地区代码中的每个游戏或每个网站的当前价格(如果适用的话,销售价格).我还有一个列存储价格的日期.我当前的表看起来像这样:
THIS STRUCTURE IS NO LONGER VALID. SEE BELOW
+----------+------+------+------+------+------+------+------------+
| steam_id | us | at | au | de | no | uk | date |
+----------+------+------+------+------+------+------+------------+
| 112233 | 999 | 899 | 999 | NULL | 899 | 699 | 2011-8-21 |
| 123456 | 1999 | 999 | 1999 | 999 | 999 | 999 | 2011-8-20 |
| ... | ... | ... | ... | ... | ... | ... | ... | …Run Code Online (Sandbox Code Playgroud) 我来实现,由于在ECMAScript中6承诺允许异步功能同步编码,对于每一个代码的承诺载货件有一个同步的必然结果.例如:
var data = processData(JSON.parse(readFile(getFileName())));
Run Code Online (Sandbox Code Playgroud)
是相同的:
var data = getFileName()
.then(readFile)
.then(JSON.parse)
.then(processData);
Run Code Online (Sandbox Code Playgroud)
现在,对于我目前的用例,我想编写代码来从大量的公共API中提取数据.API是分页的,所以在纯粹的同步世界中,我会写如下内容:
var data = [];
var offset = 0;
var total = 10000; // For example - not actually how this would work
while( offset < total ) {
data.concat(getDataFromAPI(offset));
offset = data.length;
}
Run Code Online (Sandbox Code Playgroud)
现在我的问题是,如何用承诺做到这一点?我可以这样写:
var data = [];
var offset = 0;
var total = 10000;
getDataFromAPI(offset)
.then(function(newData){
data.concat(newData);
return getDataFromAPI(data.length);
});
Run Code Online (Sandbox Code Playgroud)
但在这一点上,我被迫只是链接无限.thens - 没有循环逻辑.我觉得应该可以使用递归,但我不知道如何做到这一点.
我使用BluebirdJS作为我的诺言库,所以我可以访问他们所有的帮助方法.
我的 git 存储库现在处于一个有点奇怪的地方,所以让我解释一下我是如何到达这里的......
cd /vargit clone https://github.com/..... wwwcd wwwmkdir my-sitemv !(my-site) my-sitecd my-site现在,当我运行时git status,它声称每个文件都已被删除,并且该my-site文件夹没有被跟踪。有点道理:我移动了每个文件
为了尝试纠正这个问题,我执行了以下操作:
git init-- 在“我的网站”中创建一个新的存储库git remote add origin https://github.com/.....-- 使这个仓库成为我的起源的“克隆”git fetch --all-- 确保我了解最近的提交git branch -u origin/master master-- 告诉我的本地 master 跟踪 origin master当我这样做时,我收到以下错误:
fatal: branch 'master' does not exist
Run Code Online (Sandbox Code Playgroud)
跑步git status给了我以下内容:
On branch master
Initial commit
Untracked files:
(use "git add <file>..." …Run Code Online (Sandbox Code Playgroud) 使用重现我的确切问题的 DataFrame 进行更新
我有一个问题,NaN出现在索引中会导致非唯一行(自NaN !== NaN)。我需要删除NaN索引中出现的所有行。我之前的问题有一个带有单行的示例 DataFrame NaN,但是原始解决方案没有解决我的问题,因为它没有满足这个广告不佳的要求:
(请注意,在实际数据中,我有数千个这样的行,包括重复的行,因此
NaN !== NaN这在索引上是允许的)
(来自我原来的帖子)
>>>import pandas as pd
>>>import numpy as np
>>> df = pd.DataFrame([[1,1,"a"],[1,2,"b"],[1,3,"c"],[1,np.nan,"x"],[1,np.nan,"x"],[1,np.nan,"x"],[2,1,"d"],[2,2,"e"],[np.nan,1,"x"],[np.nan,2,"x"],[np.nan,1,"x"]], columns=["a","b","c"])
>>>df
c
a b
1.0 1.0 a
2.0 b
3.0 c
NaN x
NaN x
NaN x
2.0 1.0 d
2.0 e
NaN 1.0 x
2.0 x
1.0 x
Run Code Online (Sandbox Code Playgroud)
注意重复的行:(1.0, NaN)和(NaN, 1.0)
我尝试过一些简单的事情,例如:
>>>df = df[pandas.notnull(df.index)]
Run Code Online (Sandbox Code Playgroud)
但这会失败,因为notnull没有针对 MultiIndex 实现。 …
我正在将日志发送到 nginx 服务器并希望将这些日志转储到文件中。当一次发送一个日志时,我可以使用 NginxEchoModule 强制 nginx 读取正文,如下所示:
http {
log_format log_dump '$request_body';
server {
listen 80 default_server;
listen [::]:80 default_server;
access_log /logs/dump log_dump;
location /logs {
echo_read_request_body;
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我一次发送一个日志时,这工作得很好:
POST /logs HTTP/1.1
Host: www.example.com
123456 index.html was accessed by 127.0.0.1
POST /logs HTTP/1.1
Host: www.example.com
123457 favicon.ico was accessed by 127.0.0.1
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试批处理日志时(以避免连接开销和 HTTP 标头开销):
POST /logs HTTP/1.1
Host: www.example.com
123456 index.html was accessed by 127.0.0.1
123457 favicon.ico was accessed by 127.0.0.1
Run Code Online (Sandbox Code Playgroud)
这是我的日志文件中显示的内容:
123456 index.html was accessed by 127.0.0.1\x0A123457 …Run Code Online (Sandbox Code Playgroud) 正如Jiri Tousek所指出的那样,我的代码中抛出的错误误导了许多业余(和经验丰富)的Java开发人员。相反的是名字似乎暗示,ConcurrentModificationException也不能有任何与多线程。考虑以下代码:
import java.util.List;
import java.util.ArrayList;
class Main {
public static void main(String[] args) {
List<String> originalArray = new ArrayList<>();
originalArray.add("foo");
originalArray.add("bar");
List<String> arraySlice = originalArray.subList(0, 1);
originalArray.remove(0);
System.out.println(Integer.toString(arraySlice.size()));
}
}
Run Code Online (Sandbox Code Playgroud)
ConcurrentModificationException尽管不涉及线程,但这将抛出一个错误。
误导性的异常名称使我认为我的问题是我处理多线程的结果。我已用实际问题更新了帖子标题。
我的代码大致如下所示:
class MessageQueue {
private List<String> messages = new ArrayList<>();
private List<String> messagesInFlight = new ArrayList<>();
public void add(String message) {
messages.add(message);
}
public void send() {
if (messagesInFlight.size() > 0) {
// Wait for previous request to …Run Code Online (Sandbox Code Playgroud) 我试图理解 Kubernetes,以便我可以开始使用它进行本地开发,但我在这里遇到了一些基础知识......
我在 Mac OS X 上运行,并使用 Homebrew 通过brew install kubernetes. 之后,我启动了一个简单的应用程序(部署?服务?——我不清楚术语),如下所示:
$> minikube start
$> kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.10
$> kubectl expose deployment hello-minikube --type=NodePort --port=8080
Run Code Online (Sandbox Code Playgroud)
我直接从Kubernetes 文档获取这些命令
现在,每一步我都在尝试阅读 Kubernetes 文档并尝试使用各种命令行工具,这样我就不会盲目跟随,而是真正理解正在发生的事情。这就是我遇到的第一个巨大障碍:IP 地址太多!
$> ifconfig
...
inet 192.168.2.126 netmask 0xffffff00 broadcast 192.168.2.255
...
$> minikube ip
192.168.64.3
$> kubectl describe pods
...
IP: 172.17.0.2
...
$> kubectl describe services
...
IP: 10.96.8.59
...
Run Code Online (Sandbox Code Playgroud)
我了解其中几个:
在高/理论水平上,我确切地知道我想要构建的架构类型以及它将如何工作,但我试图使用 AWS 服务尽可能便宜地构建它,而我对 AWS 产品的不熟悉让我围着圈跑。
我们运营一个视频流平台。在繁忙的夜晚,我们会同时进行约 100 个直播,观看人数超过 30,000 人。我们预计这个数字在未来几年内将增至 100,000。直播平均持续 2 小时。
我们每 10 秒从播放器发送一次心跳,其中包含有关观看者的信息 - 他们观看了多少数据、他们缓冲了多少数据、他们的流媒体质量如何,等等。
这些心跳直接发送到 AWS Kinesis 终端节点。
最后,我们希望将所有过去的消息保留至少 5 年(希望更长),以便我们可以查看历史分析。
一些粗略计算表明,五年后我们将拥有 0.1 * 60 * 60 * 2 * 100000 * 365 * 5 = 1310亿条心跳消息。
我们的旧系统只有一个 Kinesis 消费者。聚合数据存储在 DynamoDB 中。每当消息到达时,我们都会从 DynamoDB 读取记录,更新记录,然后写回新记录。这种读取-更新-写入循环限制了我们处理消息的速度,并且使得每个传入的消息都依赖于它之前的消息,因此它们无法并行处理。
这种设置的部分原因是我们的消息模式从一开始就设计得不好。我们发送消息发送的时间戳,但我们不发送“自上次心跳以来观看的视频量”。因此,为了计算总观看时间,我们需要查找该播放器发送的最后一条心跳消息,减去时间戳,然后添加该值。许多其他指标也存在类似的问题。
我们已经开始遇到扩展问题。在高峰时段,在等待处理积压的消息时,分析可能会延迟多达四个小时。如果积压达到 24 小时,Kinesis 将开始删除数据。因此,我们需要修复管道以消除对过去消息的依赖,以便我们可以并行处理它们。
第一部分是更新我们的玩家发送的消息。我们的新规范仅包含可以简单求和而无需减法的指标。因此,例如,我们可以继续添加“查看时间”指标,而不考虑过去的消息。
第二部分是确保 Kinesis 永远不会备份。我们在原始消息到达后立即将其转储到 S3,无需进行任何处理(Kinesis Data Fire Hose),以便我们可以在闲暇时对它们进行分析。
最后,我们现在希望尽快从这些分析中实际提取信息。这就是我遇到了障碍的地方。
由于这是一个分析管道,我们的问题主要围绕过滤这些消息,然后聚合剩余消息的字段(可能,实际上很可能,通过分组)。例如:
有多少 Android 用户观看了昨晚的高清直播?(按流和操作系统过滤)
所有用户的平均带宽使用情况是多少?(SUM 和 COUNT,稍后可以在仪表板端完成最终聚合的划分)
去年使用 Apple 设备(iOS、tvOS 等)的用户比例是多少?(COUNT,按操作系统分组) …
analytics amazon-web-services amazon-emr amazon-redshift amazon-athena
在SQL中,执行以下操作非常简单:
SELECT * FROM properties WHERE (price / acres) = 3000;
Run Code Online (Sandbox Code Playgroud)
这将选择"每英亩价格"为3000的每个房产
我希望在Laravel这样做.我尝试了以下方法:
Property::where('price / acres', 3000)->get();
Run Code Online (Sandbox Code Playgroud)
但是,这会在反引号中包含列标题,从而创建以下SQL:
select * from `properties` where `price / acres` = 3000
Run Code Online (Sandbox Code Playgroud)
这显然失败了(显然)错误: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'price / acres' in 'where clause'
我想要一个Python类,其中包含如下界面:
import myclass
client = myclass.Client("user", "password")
client.users.create("user1")
client.posts.create("user1", "Hello, World!")
Run Code Online (Sandbox Code Playgroud)
请注意,而不是只是create_user或create_post,我想使用两个点指定方法:users.create/posts.create
我希望这个特定的接口模仿我正在尝试使用的HTTP API(其端点如"/ api/users/create"和"/ api/posts/create")
如果我在下面定义我的类myclass.py:
class Client(object):
def __init__(self, user, pass):
self.user = user
self.pass = pass
Run Code Online (Sandbox Code Playgroud)
那我该如何创建这些点名称空间的方法呢?我的第一个想法是创建类似的子类:
class Client(object):
def __init__(self, user, pass):
self.user = user
self.pass = pass
self.users = ClientUserAPI()
self.posts = ClientPostAPI()
class ClientUserAPI(object):
def create(self):
# Do some cURL magic
class ClientPostAPI(object):
def create(self):
# Do some cURL magic
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样做,那么我遇到两个问题之一(一个严重,另一个只是哲学/意识形态)
ClientUserAPI扩展"Client",则该__init__ …mysql ×2
python ×2
amazon-emr ×1
analytics ×1
bluebird ×1
class ×1
dataframe ×1
docker ×1
eloquent ×1
git ×1
github ×1
java ×1
javascript ×1
kubectl ×1
kubernetes ×1
laravel ×1
minikube ×1
multi-index ×1
namespaces ×1
nan ×1
nginx ×1
node.js ×1
orm ×1
pandas ×1
perl ×1
php ×1
promise ×1
sql ×1
sql-update ×1