小编bil*_*ill的帖子

Spark:RDD到List

我有一个RDD结构

RDD[(String, String)]
Run Code Online (Sandbox Code Playgroud)

我想创建2个列表(rdd的每个维度一个).

我尝试使用rdd.foreach()并填充两个ListBuffers然后将它们转换为Lists,但我猜每个节点都创建自己的ListBuffer,因为在迭代之后BufferLists是空的.我该怎么做 ?

编辑:我的方法

val labeled = data_labeled.map { line =>
  val parts = line.split(',')
  (parts(5), parts(7))
}.cache()

var testList : ListBuffer[String] = new ListBuffer()

labeled.foreach(line =>
  testList += line._1
)
  val labeledList = testList.toList
  println("rdd: " + labeled.count)
  println("bufferList: " + testList.size)
  println("list: " + labeledList.size)
Run Code Online (Sandbox Code Playgroud)

结果是:

rdd: 31990654
bufferList: 0
list: 0
Run Code Online (Sandbox Code Playgroud)

scala list apache-spark rdd

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

Group By MongoDb上的聚合

我用的是mongodb 2.6.我以这种形式存储了我的数据:

{ 
    "_id" : "my-sensor-1", 
    "points": [ 
        { "timeStamp" : NumberLong("1453468362174"), "value" : 41 }, 
        { "timeStamp" : NumberLong("1453468483297"), "value" : 66 }, 
        { "timeStamp" : NumberLong("1453468485568"), "value" : 49 },
         ...    
    ] 
}
Run Code Online (Sandbox Code Playgroud)

为了聚合文档,我做了这样的查询:

db.pointsTest.aggregate([
    { $match: { $and: [ {"points.timeStamp" : { $gt : 1453433925163}}, 
                        {"_id":"my-sensor-10"} ] } },
    {"$unwind":"$points"},
    {$group: {_id: "my-sensor-1","average":{$avg : "$points.value"}}}
])
Run Code Online (Sandbox Code Playgroud)

{"_ id":"my-sensor-1","average":52}

结果

我已将时间戳存储为毫秒,因此每次我想要聚合特定时间间隔时,我必须更改timeStamp值的范围.

我怎样才能在一个时间段内进行聚合并按间隙间隔对结果进行分组(即将现在的平均值()-1day GROUP聚合1h)?

编辑

我想做这样的事情:

db.pointsTest.aggregate([
    { $match: { $and: [ {"points.timeStamp" : { $gt : 1453433925163, $lt …
Run Code Online (Sandbox Code Playgroud)

mongodb aggregation-framework

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

python检测标签字符

我试图在特定文件中拆分单词和整数。文件的字符串采用这些形式(包含单词的行没有 '\t' 字符,但整数数字(所有正数)有):(有些单词是包含 '-' 字符的数字,)

-1234
\t22
\t44
\t46
absv
\t1
\t2
\t4
... 
Run Code Online (Sandbox Code Playgroud)

所以我的想法是通过将行的对象转换为浮动来拆分单词和字符串。

def is_number(s):
    try:
        float(s)
        return True
    except ValueError:
        return False

with codecs.open("/media/New Volume/3rd_step.txt", 'Ur') as file:#open file
    for line in file: # read line by line
        temp_buffer = line.split() # split elements
        for word in temp_buffer:
            if not('-' in word or not is_number(word)):
            ....
Run Code Online (Sandbox Code Playgroud)

所以如果它是一个词,我会得到例外,如果不是,那么它是一个数字。该文件是 50 Gb ,中间的某个地方似乎文件格式有问题。因此,拆分单词和数字的唯一可能方法是使用 \t 字符。但是我怎么能检测到呢?我的意思是我拆分了行来获取字符串,这样我就丢失了特殊字符。

编辑:

我真的很傻,很抱歉浪费你的时间。似乎我可以通过这种方式更轻松地找到它:

with codecs.open("/media/D60A6CE00A6CBEDD/InvertedIndex/1.txt", 'Ur') as file:#open file
    for line in file: # read line …
Run Code Online (Sandbox Code Playgroud)

python string split

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

文件读取和python中的for循环

我有这个文件:

-0
1
16
9
-00
1
3
4
0
7
9
-000
...
Run Code Online (Sandbox Code Playgroud)

我想对它们进行排序并将它们存储到文件中.

我读取文件将它们存储在列表中,对列表进行排序,然后将列表保存到文件中.问题是它从第二个-x开始.

 for line in file:
        temp_buffer = line.split()
        for i,word in enumerate(temp_buffer):
            if "-" not in word:
                if word in index_dict:
                    l1.append(word)
                else:
                    l1.append(function(word))
            else:
                l1.append(word)
                l1.sort()
                print(l1 , file=testfile)
                del l1
                l1 = []
Run Code Online (Sandbox Code Playgroud)

所以第一个循环它转到else语句并且只存储第一个-0而没有-0和-00之间的单词.我该怎么解决这个问题?我想输出是这样的:

-0
1
9
16
-00
0
1
3
4
7
9
-000
....
Run Code Online (Sandbox Code Playgroud)

python for-loop list

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

python 2.7中的字典

我是python的新手,我有一个问题.在这个脚本中,我重命名字符串的元素.对于小输入z <1mb的文本文件时间很短.如果我尝试输入超过2Mb,则需要超过1小时.

是字典造成的时间问题吗?我应该尝试通过列表或设置来接近吗?我已经看过这篇文章Python:List vs Dict查找有关dicts优于列表的查找表.我有点困惑.

python optimization dictionary

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

Quartz 调度程序 Cron 触发器

我想知道是否有一个函数/方法可以创建在随机时间触发的作业。我的意思是,如果我设置一个 cron 计划在每周一上午 10 点触发并给定一个时间间隔(假设为 30 分钟),则触发器将始终从 9.30 ~ 10.30 触发。例如,这是 cron 计划。

schedule.setCronSchedule("0 0 10 ? * MON");
trigger = newTrigger()
                        .withIdentity(triggerId)
                        .startNow() // <~~~~~~~~~~~~~~~ ???
                        .withDescription(schedule.getCronSchedule())
                        .withSchedule(cronSchedule(schedule.getCronSchedule())).build();
Run Code Online (Sandbox Code Playgroud)

如果我有一个以分钟为单位的特定范围的变量,我可以将其设置为随机触发吗?我的意思是,不仅仅是获取 cron 计划字符串并重新修改它,而是使用一种方法每次触发事件,基于随机范围,因此第一个星期一可能在 10.01 触发,第二个星期一可能在 9.46 触发,依此类推。

提前致谢。

java cron quartz-scheduler

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

python中的sqlite3索引表

我在python 2.7中创建了这个表.我用它来存储唯一的对名称和值.在某些查询中,我搜索名称,在其他查询中,我搜索值.让我们说SELECT查询是50-50.有没有办法创建一个双索引的表(名称上的一个索引和值的另一个索引),所以我的程序将寻求更快的数据?

这是数据库和表创建:

import sqlite3
#-------------------------db creation ---------------------------------------#
db1 = sqlite3.connect('/my_db.db')
cursor = db1.cursor()

cursor.execute("DROP TABLE IF EXISTS my_table")

sql = '''CREATE TABLE my_table (
        name TEXT DEFAULT NULL,
        value INT
        );'''
cursor.execute(sql)

sql = ("CREATE INDEX index_my_table ON my_table (name);")
cursor.execute(sql)
Run Code Online (Sandbox Code Playgroud)

或者是否还有其他更快的结构来实现更快的价值寻求?

python sqlite indexing

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