无论我到哪里,我都看到MongoDB是CP.但是当我深入挖掘时,我发现它最终是一致的.当你使用safe = true时它是CP吗?如果是这样,这是否意味着当我使用safe = true写入时,所有副本将在获得结果之前更新?
我有以下方式的数据集:
FieldA FieldB ArrayField
1 A {1,2,3}
2 B {3,5}
Run Code Online (Sandbox Code Playgroud)
我想爆炸ArrayField上的数据,因此输出将以下列方式显示:
FieldA FieldB ExplodedField
1 A 1
1 A 2
1 A 3
2 B 3
2 B 5
Run Code Online (Sandbox Code Playgroud)
我的意思是我想为ArrayField中的每个项生成一个输出行,同时保持其他字段的值.
你将如何在Spark中实现它.请注意,输入数据集非常大.
我的查询需要很长时间才能完成.我喜欢做一些性能测试但是在我检查一次(当前需要约30秒)之后,查询开始运行得更快(<1秒).我认为它必须与mongodb缓存.有没有办法禁用mongodb的缓存或其他方式我可以检查性能?
我在mongohq使用mongodb.使用Ruby on Rails编程3.以下是解释:
{"cursor"=>"BtreeCursor start_-1", "nscanned"=>5276, "nscannedObjects"=>5276, "n"=>25, "millis"=>3264, "nYields"=>0, "nChunkSkips"=>0, "isMultiKey"=>false, "indexOnly"=>false, "indexBounds"=>{"start"=>[[{"$maxElement"=>1}, {"$minElement"=>1}]]}, "allPlans"=>[{"cursor"=>"BtreeCursor attendees_count_-1", "indexBounds"=>{"attendees_count"=>[[1.7976931348623157e+308, 1]]}}, {"cursor"=>"BtreeCursor images_count_-1", "indexBounds"=>{"images_count"=>[[1.7976931348623157e+308, 2]]}}, {"cursor"=>"BtreeCursor start_-1", "indexBounds"=>{"start"=>[[{"$maxElement"=>1}, {"$minElement"=>1}]]}}, {"cursor"=>"BtreeCursor start_-1_end_-1", "indexBounds"=>{"start"=>[[{"$maxElement"=>1}, {"$minElement"=>1}]], "end"=>[[{"$maxElement"=>1}, {"$minElement"=>1}]]}}, {"cursor"=>"BtreeCursor attendees._id_1 multi", "indexBounds"=>{"attendees._id"=>[[BSON::ObjectId('4f0b621e94bb688563000007'),BSON::ObjectId('4f0b621e94bb688563000007')], [BSON::ObjectId('4f0b647d5a8c00acde05236f'), BSON::ObjectId('4f0b647d5a8c00acde05236f')], [BSON::ObjectId('4f0b647d5a8c00acde052370'), BSON::ObjectId('4f0b647d5a8c00acde052370')], [BSON::ObjectId('4f0b647d5a8c00acde052371'), BSON::ObjectId('4f0b647d5a8c00acde052371')], [BSON::ObjectId('4f0b647d5a8c00acde052372'), BSON::ObjectId('4f0b647d5a8c00acde052372')], [BSON::ObjectId('4f0b647d5a8c00acde052373') ... (lots of Object IDs)]]}}}
Run Code Online (Sandbox Code Playgroud)
请注意,我不得不截断一些解释,因为它太长了.存在"大量对象ID"的地方有很多对象ID(~400).
谢谢大家
我已经将制表符分隔文件加载到S3中,在这个文件夹下有这种类型的文件夹:bucket - > se - > y = 2013 - > m = 07 - > d = 14 - > h = 00
每个子文件夹都有1个文件,代表我的流量小时.
然后,我创建了一个EMR工作流,以便在hive的交互模式下运行.
当我登录到主服务器并进入配置单元时,我运行此命令:
CREATE EXTERNAL TABLE se (
id bigint,
oc_date timestamp)
partitioned by (y string, m string, d string, h string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
LOCATION 's3://bi_data';
Run Code Online (Sandbox Code Playgroud)
我收到此错误消息:
FAILED:元数据错误:java.lang.IllegalArgumentException:列出存储桶中的对象时必须指定存储桶名称参数
FAILED:执行错误,从org.apache.hadoop.hive.ql.exec.DDLTask返回代码1
有人可以帮忙吗?
更新 即使我尝试只使用字符串字段,我也会得到同样的错误.使用字符串创建表:
CREATE EXTERNAL TABLE se (
id string,
oc_date string)
partitioned by (y string, m string, d string, h string) …Run Code Online (Sandbox Code Playgroud) 我有一个数据框,当另存为Parquet格式时,它需要约11GB。读取数据框并写入json时,需要5分钟。当我添加partitionBy(“ day”)时,需要几个小时才能完成。我知道分配到分区是一项昂贵的操作。有没有办法使其更快?对文件进行排序会更好吗?
例:
运行5分钟
df=spark.read.parquet(source_path).
df.write.json(output_path)
Run Code Online (Sandbox Code Playgroud)
运行几个小时
spark.read.parquet(source_path).createOrReplaceTempView("source_table")
sql="""
select cast(trunc(date,'yyyymmdd') as int) as day, a.*
from source_table a"""
spark.sql(sql).write.partitionBy("day").json(output_path)
Run Code Online (Sandbox Code Playgroud) 我有一个链接到 BigQuery 来发送事件数据的 Firebase。它以旧分区方式创建表,其中日期是表名的一部分。
Firebase 创建一个具有event_timestamp和的架构event_date。当我查看特定日期的分区时event_date日期与该分区相同,但最小时间戳从前一个日期的晚上 9 点开始,并在分区日期的晚上 9 点之前结束。
在Firebase 架构的文档中,它写道event_timestamp“事件在客户端上记录的时间(以微秒为单位,UTC)。”
那么什么的完全时区event_timestamp,将event_date与分区火力地堡模式的日期?
是event_timestamp用当地时间写的吗?
我正在使用用python编写的UDF来更改数字的基数。
因此,我读取了一个实木复合地板文件并写入了一个实木复合地板文件并应用了UDF。这是我运行的行:
input_df.withColumn("origin_base", convert_2_dest_base(input_df.origin_base)).write.mode('overwrite').parquet(destination_path)
Run Code Online (Sandbox Code Playgroud)
这种转换使火花可以利用大量内存,并且我得到以下警告:
18年6月17日08:05:39警告TaskSetManager:在阶段4.0(TID 183,ip-10-100-5-196.ec2.internal,executor 19)中丢失任务40.0:ExecutorLostFailure(executor 19退出是由以下一项引起的)原因:正在运行的容器因超出内存限制而被YARN杀死。4.4 GB使用的4.4 GB物理内存。考虑提高spark.yarn.executor.memoryOverhead。
最终失败了。
UDF不是正确的方法吗?为什么要消耗这么多内存?
我正试图用红宝石驱动程序向mongodb做一个upsert.如果该行存在,我希望将新数据推送到数组,否则使用数组中的一个项创建新文档.
当我在mongodb上运行它看起来像这样:
db.events.update( { "_id" : ObjectId("4f0ef9171d41c85a1b000001")},
{ $push : { "events" : { "field_a" : 1 , "field_b" : "2"}}}, true)
Run Code Online (Sandbox Code Playgroud)
它有效.
当我在ruby上运行它看起来像这样:
@col_events.update( { "_id" => BSON::ObjectId.from_string("4f0ef9171d41c85a1b000001")},
{ :$push => { "events" => { "field_a" => 1 , "field_b" => "2"}}}, :$upsert=>true)
Run Code Online (Sandbox Code Playgroud)
它不起作用.我没有收到错误,但我也没有看到新的行.
会理解帮助我理解我做错了什么.
apache-spark ×3
mongodb ×3
pyspark ×2
amazon-s3 ×1
cap-theorem ×1
database ×1
firebase ×1
hive ×1
mongodb-ruby ×1
mongohq ×1
nosql ×1
ruby ×1
scala ×1