我们想要做的是为我们的实验室成员创建一个本地数据存储库来组织,搜索,访问,编目,引用我们的数据等.我觉得CKAN可以做所有这些事情; 但是,我不确定它将如何为我们实际拥有的数据处理这些任务(我可能是错的,这就是我要问的原因).
我们的实验室正在采购大量数据供内部使用.我们希望能够在我们的组中编目和组织这些数据(也许是CKAN?),这样人们就可以将数据推送到目录,并提取数据并使用它.一些用例将是,具有数据的ACL,Web界面,搜索,浏览,组织,添加,删除,更新数据集等.虽然CKAN看起来非常适合这种情况,但问题在于数据(更多)所以我们正试图处理的数额.
我们想要对TB级图像(200k +图像),各种格式的地理空间数据,Twitter流(JSON数据的TB),数据库转储文件,二进制数据,机器学习模型等进行编目.我不认为它会合理地将100k 64MB JSON文件作为资源添加到CKAN数据集中,或者是吗?我们意识到我们无法在这个JSON/images/geo数据中搜索,这很好.但我们希望找到有关我们是否有可用数据的信息(例如我们搜索"twitter 2015-02-03"),这是一种元数据搜索,如果你愿意的话.在CKAN中使用本地文件存储,如果用户请求200k图像会发生什么?当必须回答这些请求时,系统是否会无响应?
我已经在datahub.io上看过CKAN,其中绝大多数都是小型CSV文件,2-3MB的小型zip文件,以及数据集中不超过20或30个单独的文件.
那么CKAN能够做我们想要的吗?如果对替代品没有任何建议?
编辑更具体的问题而不是讨论:
我浏览了一下并搜索了有关此主题的信息,但我没有看到部署的系统包含任何大量数据.
我有一个使用Hibernate和Spring Data JPA的Spring应用程序CrudRepository
.如果查询的数据存在于数据库中,则一切似乎都能正常工作.但是,如果有一个返回没有结果的查询,那么CrudRepository
返回null
并得到一个NullPointerException
.因此,例如,http://localhost:8080/api/id=3
如果数据库中有一个id为3的行,它可以正常工作.如果没有id为3的行,则失败并显示:
出现意外错误(type = Internal Server Error,status = 500)
在客户端和NullPointerException
服务器端.
处理"无结果"查询的简单情况的正确方法是什么?
我正在使用Zeppelin 0.5.5.我在这里找到了python的代码/示例,因为我无法使用%pyspark http://www.makedatauseful.com/python-spark-sql-zeppelin-tutorial/.我感觉他的%pyspark示例有效,因为如果您使用原始的%spark zeppelin教程,则已经创建了"bank"表.
这段代码在笔记本中.
%pyspark
from os import getcwd
# sqlContext = SQLContext(sc) # Removed with latest version I tested
zeppelinHome = getcwd()
bankText = sc.textFile(zeppelinHome+"/data/bank-full.csv")
bankSchema = StructType([StructField("age", IntegerType(), False),StructField("job", StringType(), False),StructField("marital", StringType(), False),StructField("education", StringType(), False),StructField("balance", IntegerType(), False)])
bank = bankText.map(lambda s: s.split(";")).filter(lambda s: s[0] != "\"age\"").map(lambda s:(int(s[0]), str(s[1]).replace("\"", ""), str(s[2]).replace("\"", ""), str(s[3]).replace("\"", ""), int(s[5]) ))
bankdf = sqlContext.createDataFrame(bank,bankSchema)
bankdf.registerAsTable("bank")
Run Code Online (Sandbox Code Playgroud)
此代码位于同一笔记本中,但工作台不同.
%sql
SELECT count(1) FROM bank
org.apache.spark.sql.AnalysisException: no such table bank; line 1 pos 21
...
Run Code Online (Sandbox Code Playgroud) 我有几个控制器自动创建REST
端点.
@RepositoryRestResource(collectionResourceRel = "books", path = "books")
public interface BooksRepository extends CrudRepository<Books, Integer> {
public Page<Books> findTopByNameOrderByFilenameDesc(String name);
}
Run Code Online (Sandbox Code Playgroud)
当我访问:http:// localhost:8080/Books
我回来了:
{
"_embedded": {
"Books": [{
"id": ,
"filename": "Test123",
"name": "test123",
"_links": {
"self": {
"href": "http://localhost:8080/books/123"
},
"Books": {
"href": "http://localhost:8080/books/123"
}
}
}]
},
"_links": {
"self": {
"href": "http://localhost:8080/books"
},
"profile": {
"href": "http://localhost:8080/profile/books"
},
"search": {
"href": "http://localhost:8080/books/search"
},
"page": {
"size": 20,
"totalElements": 81,
"totalPages": 5,
"number": 0
}
} …
Run Code Online (Sandbox Code Playgroud) 我有以下 REST 控制器。
@RepositoryRestController
@RequestMapping(value = "/booksCustom")
public class BooksController extends ResourceSupport {
@Autowired
public BooksService booksService;
@Autowired
private PagedResourcesAssembler<Books> booksAssembler;
@RequestMapping("/search")
public HttpEntity<PagedResources<Resource<Books>>> search(@RequestParam(value = "q", required = false) String query, @PageableDefault(page = 0, size = 20) Pageable pageable) {
pageable = new PageRequest(0, 20);
Page<Books> booksResult = BooksService.findBookText(query, pageable);
return new ResponseEntity<PagedResources<Resource<Books>>>(BooksAssembler.toResource(BooksResult), HttpStatus.OK);
}
Run Code Online (Sandbox Code Playgroud)
我Page<Books> BooksResult = BooksService.findBookText(query, pageable);
的由SolrCrudRepository
. 当它运行时BookResult
有几个字段,内容字段和其他几个字段,一个是highlighted
. 不幸的是,我从 REST 响应中得到的唯一content
信息是字段中的数据和 HATEOAS 响应中的元数据信息(例如页面信息、链接等)。将highlighted
字段添加到响应的正确方法是什么?我假设我需要修改ResponseEntity …
出于某种原因,当我在我的liquibase.properties
文件中设置它时,Liquibase maven 插件没有使用我的属性。当我运行时,mvn liquibase:update
我得到以下信息。
[INFO] there are no resolved artifacts for the Maven project.
[INFO] Parsing Liquibase Properties File
[INFO] File: target/classes/liquibase.properties
[INFO] 'classpath' in properties file is not being used by this task.
Run Code Online (Sandbox Code Playgroud)
因此,更新失败,因为 liquibase 找不到驱动程序并且无法连接到数据库。
我看到了这个 SO 问题,但他们使用的是 liquibase 可执行文件而不是 maven。我用它作为如何使用 liquibase.properties 文件的例子。
我看到它在哪里遇到异常 L571 到 L588 异常,但实际的异常没有打印出来,所以我不知道错误的原因。
我将 JSON 数据存储在我的 postgresql 9.5 DB 的 JSONB 字段中。
有没有办法在不知道哪一列是子对象的情况下制作子对象列?
有问题的 JSON 示例:
{
"a":1,
"b":[1,2,3],
"c":"bar",
"d":{
"key1":"value1",
"key2":"value2"
}
}
Run Code Online (Sandbox Code Playgroud)
我可以使用以下内容从 JSON 对象中获取所有键。
SELECT * FROM json_object_keys('{"a":1,"b":[1,2,3],"c":"bar", "d":{"key1":"value1", "key2":"value2"}}')
那时我可以使用 json_to_record() 但我想将列拆分为它们自己的单独字段。
select * from json_to_record('{"a":1,"b":[1,2,3],"c":"bar", "d":{"key1":"value1", "key2":"value2"}}') as x(a int, b text, c text, d text)
得到我
a| b | c | d
1| [1,2,3] | bar | {"key1":"value1", "key2":"value2"}
Run Code Online (Sandbox Code Playgroud)
有没有办法让这样的东西回来,最好是在一个查询中?
--------------------------------------------------------------------
a| b | c | d | key1 | key2
1| [1,2,3] | bar | …
Run Code Online (Sandbox Code Playgroud) 我遇到了一些我没有预料到的额外事件的问题。
我在看文件夹C:\Users\kvasko\Downloads\data
。如果我复制一个文件夹,2017\07\25\LogFile.xml
我将看到以下 3 个“创建”事件,而我希望只看到 1 个。如果我提前创建日期文件夹结构(但在应用程序运行时查看文件夹),它只会生成一个像我期望的那样的事件。我从来没有因为创建文件夹而收到事件。就像为创建文件夹而生成事件一样,但是在检查我的on_created(self,event)
所有三个外观事件上消息的实际事件时,它们看起来完全相同。这里发生了什么?
这是示例输出和最小示例。
2017-09-22 13:58:10,182 - root - INFO - Watchdog: file created C:\Users\kvasko\Downloads\data\2017\07\25\LogFile.xml
2017-09-22 13:58:11,184 - root - INFO - Watchdog: file created C:\Users\kvasko\Downloads\data\2017\07\25\LogFile.xml
2017-09-22 13:58:12,187 - root - INFO - Watchdog: file created C:\Users\kvasko\Downloads\data\2017\07\25\LogFile.xml
Run Code Online (Sandbox Code Playgroud)
我希望:
2017-09-22 13:58:12,187 - root - INFO - Watchdog: file created C:\Users\kvasko\Downloads\data\2017\07\25\LogFile.xml
Run Code Online (Sandbox Code Playgroud)
有没有办法从文件夹创建中检测它是否实际上有多个事件?
以下是我的观察者配置。
folder = "C:\\Users\\kvasko\\Downloads\\data"
observer = Observer(MyProcessHandler(patterns=["*.xml"]), folder, recursive=True)
observer.start_observer()
os.mkdirs("C:\\Users\\kvasko\\Downloads\\data\\2017\\07\\25")
shutil.copy2("C:\temp\LogFile.xml", "C:\\Users\\kvasko\\Downloads\\data\\2017\\07\\25")
try:
while True:
time.sleep(5)
except:
print("Error")
Run Code Online (Sandbox Code Playgroud)
以下是我的处理程序类。
import …
Run Code Online (Sandbox Code Playgroud) 例如,假设我有一个包含 4 个分区的主题。我向这个主题发送了 4k 条消息。每个分区获得 1k 条消息。由于外部因素,其中 3 个消费者分别处理了所有 1k 条消息。但是,第 4 个分区只能通过 200 条消息,还剩下 800 条消息需要处理。有没有一种机制可以让我“重新平衡”主题中的数据,说给分区 1-3 200 的分区 4s 数据,让所有带有 200 条消息的分区成为一个进程?
我不是在寻找一种向消费者组添加额外节点并让 kafka 平衡分区的方法。
添加了重新分配分区的输出:
当前分区副本分配
{
"version": 1,
"partitions": [
{
"topic": "MyTopic",
"partition": 0,
"replicas": [
0
],
"log_\ndirs": [
"any"
]
},
{
"topic": "MyTopic",
"partition": 1,
"replicas": [
0
],
"log_dirs": [
"any"
]
},
{
"topic": "MyTopic",
"partition": 4,
"replicas": [
0
],
"log_dirs": [
"any"
]
},
{
"topic": "MyTopic",
"partition": …
Run Code Online (Sandbox Code Playgroud) java ×3
spring ×3
spring-data ×2
apache-kafka ×1
ckan ×1
hibernate ×1
json ×1
jsonb ×1
liquibase ×1
maven ×1
postgresql ×1
python ×1
rest ×1
spring-mvc ×1
spring-rest ×1
watchdog ×1