MongoDB中输出格式的聚合函数有多灵活?
数据格式:
{
"_id" : ObjectId("506ddd1900a47d802702a904"),
"port_name" : "CL1-A",
"metric" : "772.0",
"port_number" : "0",
"datetime" : ISODate("2012-10-03T14:03:00Z"),
"array_serial" : "12345"
}
Run Code Online (Sandbox Code Playgroud)
现在我正在使用这个聚合函数来返回DateTime数组,一个指标数组和一个计数:
{$match : { 'array_serial' : array,
'port_name' : { $in : ports},
'datetime' : { $gte : from, $lte : to}
}
},
{$project : { port_name : 1, metric : 1, datetime: 1}},
{$group : { _id : "$port_name",
datetime : { $push : "$datetime"},
metric : { $push : "$metric"},
count : { $sum : …Run Code Online (Sandbox Code Playgroud) 假设我有一个数组数组,我想返回数组中每个数组的第一个元素:
array = [[["028A","028B","028C","028D","028E"],
["028F","0290","0291","0292","0293"],
["0294","0295","0296","0297","0298"],
["0299","029A","029B","029C","029D"],
["029E","029F","02A0","02A1","02A2"]],
[["02A3","02A4"],
["02A5", "02A6"]];
Run Code Online (Sandbox Code Playgroud)
我知道我可以这样做:
var firsts = [];
_.each(array, function(item){
_.each(item, function(thisitem){
firsts.push(_.first(thisitem));
});
});
Run Code Online (Sandbox Code Playgroud)
但是,如果我想用下划线的_.chain()方法做什么呢?只是学习下划线,到目前为止似乎非常有用.
在Windows python环境中,我可以像这样得到本地时区,但它不适用于pytz:
>>> import win32timezone
>>> win32timezone.TimeZoneInfo.local()
TimeZoneInfo(u'US Mountain Standard Time', True)
>>> win32timezone.TimeZoneInfo.local().timeZoneName
u'US Mountain Standard Time'
>>> tz = pytz.timezone(win32timezone.TimeZoneInfo.local().timeZoneName)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\pytz\__init__.py", line 185, in timezone
raise UnknownTimeZoneError(zone)
pytz.exceptions.UnknownTimeZoneError: 'US Mountain Standard Time'
Run Code Online (Sandbox Code Playgroud)
将输出转换为时区名称pytz.timezone()的好方法是什么?
这是答案tzlocal(感谢Matt):
>>> from tzlocal.win32 import get_localzone_name
>>> get_localzone_name()
'America/Phoenix'
>>> tz = pytz.timezone(get_localzone_name())
>>> tz
<DstTzInfo 'America/Phoenix' MST-1 day, 17:00:00 STD>
Run Code Online (Sandbox Code Playgroud) 根据此页面:https://spark.apache.org/sql/您可以通过ODBC或JDBC将现有BI工具连接到Spark SQL:

我不是指鲨鱼,因为这基本上是EOL:
正是出于这个原因,我们将Shark中的开发作为一个单独的项目结束,并将所有开发资源转移到Spark SQL,这是Spark中的一个新组件.
BI工具(如Tableau)如何通过ODBC连接到shark sql?
所以这很奇怪.我正在尝试使用mapreduce在一个唯一的端口下对datetime/metrics进行分组:
文件布局:
{
"_id" : ObjectId("5069d68700a2934015000000"),
"port_name" : "CL1-A",
"metric" : "340.0",
"port_number" : "0",
"datetime" : ISODate("2012-09-30T13:44:00Z"),
"array_serial" : "12345"
}
Run Code Online (Sandbox Code Playgroud)
和mapreduce函数:
var query = {
'array_serial' : array,
'port_name' : { $in : ports },
'datetime' : { $gte : from, $lte : to}
}
var map = function() {
emit( { portname : this.port_name } , { datetime : this.datetime,
metric : this.metric });
}
var reduce = function(key, values) {
var res = { dates : …Run Code Online (Sandbox Code Playgroud) 架构
{
"_id" : ObjectId("5069d68700a2934015000000"),
"port_name" : "CL1-A",
"metric" : 340,
"port_number" : "0",
"datetime" : ISODate("2012-09-30T13:44:00Z"),
"array_serial" : "12345"
}
Run Code Online (Sandbox Code Playgroud)
每个阵列有128个端口,每个文档是该指标的一分钟数据.似乎array_serial对于分片键不是一个好选择,因为基数较低,也就是说,串行的所有数据12345都必须保留在同一个分片上而不能分成块,对吗?
这似乎port_number会允许适度的基数,但是它会使查询隔离失败,因为同一阵列上的多个端口的单个查询将跨越多个分片.我预计用户不需要一次查询超过4-8个端口.
答案是一个组合吗?我应该使用一段日期时间,如月份还是周?
我知道其中__file__包含包含代码的文件名,但是有没有办法获取调用该函数的脚本/文件的名称?
如果我有一个名为filenametest_b.py:
def printFilename():
print(__file__)
Run Code Online (Sandbox Code Playgroud)
我将函数导入filenametest_a.py:
from filenametest_b import *
printFilename()
Run Code Online (Sandbox Code Playgroud)
我得到:
C:\Users\a150495>python filenametest_a.py
C:\Users\a150495\filenametest_b.py
Run Code Online (Sandbox Code Playgroud)
我可以在b文件中执行某些操作来打印文件名吗a?
我正在尝试解析根据类方法中给出的命令返回的不同XML ...但我想我在这里有点深入.
我希望能够使用其他方法并从XML :: Twig处理程序中访问WITHIN实例的属性.
这是我在Moose对象中定义的实例方法,以便使用XML :: Twig获取和解析XML:
sub get_xmls {
my $self = shift;
my $sehost = shift;
my $symm = shift;
$self->log->info("Getting XMLs for $sehost - $symm");
my %SYMMAPI_CALLS = (
"Config" => {
'command' => "symcfg list -sid ${symm} -v",
'handlers' => {
'SymCLI_ML/Symmetrix' => $self->can('process_symm_info')
},
'dbtable' => "inv_emc_array"
},
"Pools" => {
'command' => "symcfg -sid ${symm} list -pool -thin",
'handlers' => {
'DevicePool' => $self->can('process_symm_pool')
},
'dbtable' => "inv_emc_pool"
}
);
foreach my $key …Run Code Online (Sandbox Code Playgroud)