我有一个批处理作业,它使用从数据库读取HibernateCursorItemReader,使用自定义处理器处理结果,然后提交到另一个数据库。
我想显示的是相对于要处理的总项目数已处理了多少项目。
我尝试实现一个自定义JobExecutionListener,以@beforeJob从第一个表中获取行计数,然后可以Job Execution定期将其与提交进行比较。
有没有比使用监听器更好的方法Job Execution。是否可以在第一次读取时获取表的总行数,在HibernateCursorItemReader初始化期间设置一个值或类似的值?
工作
<batch:job id="SomeLongJob" job-repository="jobRepository" restartable="true">
<batch:listeners>
<batch:listener ref="batchJobExecutionListener" />
</batch:listeners>
<batch:step id="first1">
<tasklet transaction-manager="hibernateTransactionManager">
<chunk reader="hibernateItemReader"
processor="batchCustomProcessor"
writer="hibernateItemWriter"
skip-limit="0"
commit-interval="10">
</chunk>
</tasklet>
</batch:step>
</batch:job>
Run Code Online (Sandbox Code Playgroud)
读者
<bean id="hibernateItemReader"
class="org.springframework.batch.item.database.HibernateCursorItemReader">
<property name="queryString" value="from MyTable" />
<property name="sessionFactory" ref="sessionFactory" />
</bean>
Run Code Online (Sandbox Code Playgroud) 假设我想在集群上运行一个作业:job1.m
Slurm 处理批处理作业,我正在加载 Mathematica 以保存输出文件 job1.csv
我提交了 job1.m 并且它在队列中。现在,我编辑 job1.m 以获得不同的变量和参数,并告诉它将数据保存到 job1_edited.csv。然后我重新提交job1.m。
现在我有两个批处理作业在队列中。
我的输出文件会怎样?job1.csv 是来自原始 job1.m 文件的数据吗?job1_edited.csv 会是编辑后的文件中的数据吗?还是 job1.csv 和 job1_edited.csv 是相同的输出?
:(
提前致谢!
我有一个应用程序可以执行很多 batchGets(主要是大约 2000 个键)。这是我使用的代码:
AerospikeClient aerospike = new AerospikeClient("10.0.240.2", port)
public byte[][] getBatch(byte[][] keys) {
Key[] aeroKeys = new Key[keys.length];
for (int i = 0; i < keys.length; i++) {
aeroKeys[i] = new Key(NAMESPACE, setName, keys[i]);
}
Record[] records = aerospike.get(batchPolicy, aeroKeys);
byte[][] response = new byte[keys.length][];
for (int i = 0; i < keys.length; i++) {
if (records[i] != null) {
response[i] = (byte[]) records[i].getValue(DEFAULT_BIN_NAME);
}
}
return response;
}
Run Code Online (Sandbox Code Playgroud)
当我有一个请求时,此代码可以完美且快速地运行。但是当我运行多个并行线程执行 batchGets 时,它非常慢(退化与线程数成线性关系,例如 4 个线程 = 4 倍慢,8 个线程 …
我有一个“老好人”fortran.exe文件(无法访问代码),我需要使用批处理文件执行数百次。
然而,在 fortran 程序结束时,它打印"Press ENTER to exit",当然会中断批处理文件的执行......
有没有办法将 发送{ENTER}到正在运行的程序?
当我以管理员身份运行 bat 文件时,我在生成日志文件 (Export_Files_Logs.log) 时遇到问题。但是当我双击bat文件时。生成日志文件。知道为什么会发生这种情况吗?
FOR %%f IN (D:\batch\outbound\Delta_Sync\Data\Log\*.log) DO type %%f >> Export_Files_Logs.log & echo. >> Export_Files_Logs.log
pause
Run Code Online (Sandbox Code Playgroud) 我在尝试定期更新文档集合或尝试写入大量数据时遇到 Firestore 批量提交问题。Firestore 似乎只是冻结并且不会发送响应。在这两种情况下,都会遵守最大批量大小 (500) 和文档大小的建议。例如,使用 cron-jobs,提交会成功运行一段时间,然后完全停止,没有任何错误跟踪。
例如,下面的代码在开始出现错误之前会连续执行 6 次。
public updateCoins = async () =>{
const markets = await this.getMarkets('usd')
const maxCount = Math.round(markets.length/this.FB_BATCH_SIZE) + 1
for(let i=0; i< maxCount; i++){
const marketBatch = markets.slice(i*this.FB_BATCH_SIZE, (i+1)*this.FB_BATCH_SIZE > markets.length ? markets.length : (i+1)*this.FB_BATCH_SIZE)
const batchCoins = this.fbService.db.batch()
marketBatch.map((entry)=>{
const coin = this.mapCoin(entry)
if(coin){
const coinRef = this.coinsCol.doc(coin.id);
batchCoins.set(coinRef,coin,{merge:true})
}
})
await batchCoins.commit()
.then(()=>{
console.log('Commited coins batch update')
}).catch((_e)=>{
console.log('Exception saving coins',_e)
})
}
}Run Code Online (Sandbox Code Playgroud)
我正在尝试使用镶木地板数据文件运行批量转换推理作业,但找不到任何内容。到处都说批量转换仅接受文本/csv 或 json 格式类型。出于测试目的,我确实尝试在 AWS 帐户内使用 lambda 函数来调用 parque 数据,但批量转换作业从未成功。出现 ClientError: 400,解析数据时出错。
request = \
{
"TransformJobName": batch_job_name,
"ModelName": model_name,
"BatchStrategy": "MultiRecord",
"TransformOutput": {
"S3OutputPath": batch_output
},
"TransformInput": {
"DataSource": {
"S3DataSource": {
"S3DataType": "S3Prefix",
"S3Uri": batch_input
}
},
"ContentType": "application/x-parquet",
"SplitType": "Line",
"CompressionType": "None"
},
"TransformResources": {
"InstanceType": "ml.m4.xlarge",
"InstanceCount": 1
}
}
client.create_transform_job(**request)
return "Done"
Run Code Online (Sandbox Code Playgroud)
目前,我正在尝试使用 parque 数据文件在本地运行 sagemaker 批量转换作业。我有可以在本地终端中运行以“服务”的 docker 映像,并且可以使用 REST API 服务 Postman 从“localhost:8080/incalls”使用“二进制”输入函数上传 parque 数据文件来调用数据。它工作正常,我可以看到邮递员体内填充的数据。但是,我无法使用 parque 数据进行批量转换。
有没有人成功使用 parquet 文件使用 sagemaker 批量转换进行转换和预测?
transform batch-processing amazon-web-services parquet amazon-sagemaker
当我尝试更新插入测试数据(1,000 个实体)时,花了1m 5s。
\n所以我看了很多文章,然后我把处理时间减少到20秒。
\n但它对我来说仍然很慢,我相信有比我使用的方法更多的好的解决方案。有没有人有好的做法来处理这个问题?
\n我还想知道哪个部分使它变慢?
\n谢谢你!
\n该实体类是从用户手机中收集到用户步行步数的健康数据。
\nPK为userId和recorded_at(recorded_atPK来自请求数据)
@Getter\n@NoArgsConstructor\n@IdClass(StepId.class)\n@Entity\npublic class StepRecord {\n @Id\n @ManyToOne(targetEntity = User.class, fetch = FetchType.LAZY)\n @JoinColumn(name = "user_id", referencedColumnName = "id", insertable = false, updatable = false)\n private User user;\n\n @Id\n private ZonedDateTime recordedAt;\n\n @Column\n private Long count;\n\n @Builder\n public StepRecord(User user, ZonedDateTime recordedAt, Long count) {\n this.user = user;\n …Run Code Online (Sandbox Code Playgroud) 我需要在Windows操作系统上使用命令行在屏幕上生成特定文件的base64数据(不生成文件)。
我已经看到在Unix系统上足以使用
cat <file_name>| base64
Run Code Online (Sandbox Code Playgroud)
获取编码为 base64 的文件内容。
在 Windows 上我无法得到相同的结果。
我找到了这个解决方案:
certutil -encode -f <file_name> tmp.b64 && findstr /v /c:- tmp.b64 && del tmp.b64
Run Code Online (Sandbox Code Playgroud)
但这需要系统生成一个临时文件,所以最后去销毁它。仅使用该certutil命令,屏幕上的结果就会被包含不相关信息的 3 行所污染。
有人可以帮我在 Windows 上提供一个仅生成 base64 数据的命令吗?
更新:我通过这个新版本的命令改进了屏幕上的结果:
certutil -encode -f <file_name> tmp.b64 && cls && findstr /v /c:- tmp.b64 && del tmp.b64
Run Code Online (Sandbox Code Playgroud)
结果更像是我的要求,但我想避免tmp.b64每次都创建临时文件。
如何快速关闭VS Code中所有打开的终端?
我有很多打开的终端,我可以一一检查它们并分别杀死它们。或者我可以选择其中的一些,然后杀死选定的批次。但这两种方法都不方便,因为它们需要大量时间。我至少有 10000 个开放终端,而在一批中我可以选择几百个。
有没有办法一次性杀死所有终端?
batch-processing ×10
windows ×3
batch-file ×2
java ×2
spring ×2
aerospike ×1
base64 ×1
bulkinsert ×1
cmd ×1
command-line ×1
firebase ×1
jpa ×1
kill ×1
parquet ×1
progress-bar ×1
slurm ×1
spring-batch ×1
terminal ×1
transform ×1
typescript ×1