我试图在一个表中组合几个字段,然后对这些组进行求和,但它们会被重复计算.
我的模型如下:
class CostCenter(db.Model):
__tablename__ = 'costcenter'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String)
number = db.Column(db.Integer)
class Expense(db.Model):
__tablename__ = 'expense'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
glitem_id = db.Column(db.Integer, db.ForeignKey('glitem.id'))
glitem = db.relationship('GlItem')
costcenter_id = db.Column(db.Integer, db.ForeignKey('costcenter.id'))
costcenter = db.relationship('CostCenter')
value = db.Column(db.Float)
date = db.Column(db.Date)
Run Code Online (Sandbox Code Playgroud)
我一直在使用:
expenses=db.session.query(Expense,func.sum(Expense.value)).group_by(Expense.date).filter(CostCenter.id.in_([1,2,3]))
Run Code Online (Sandbox Code Playgroud)
当我打印费用时,它显示了后面的SQL语句.它对我来说是正确的,但我不熟悉SQL.问题是它作为sum_1输出的值被多次计数.如果我在"in statment"中有[1]项,那么它将全部三个相加.如果我有[1,2],它将总和所有三个然后加倍它,如果我有[1,2,3],它将总和所有三个并加倍它.我不确定为什么它会多次计数.我该如何解决?
SELECT expense.id AS expense_id, expense.glitem_id AS expense_glitem_id, expense.costcenter_id AS expense_costcenter_id, expense.value AS expense_value, expense.date AS expense_date, sum(expense.value) AS sum_1
FROM expense, costcenter
WHERE costcenter.id IN (:id_1, :id_2, :id_3) …Run Code Online (Sandbox Code Playgroud) 我一直在努力寻找火花作业的问题,该火花作业无限期地挂在我尝试将其写到S3或HDFS(约100G拼花格式的数据)的地方。
导致挂起的行:
spark_df.write.save(MY_PATH,format='parquet',mode='append')
Run Code Online (Sandbox Code Playgroud)
我已经在覆盖模式和附加模式下进行了尝试,并尝试将其保存到HDFS和S3,但是无论如何,该工作都将挂起。
在Hadoop资源管理器GUI中,它将Spark应用程序的状态显示为“正在运行”,但是看起来Spark实际上并没有执行任何操作,当我查看Spark UI时,没有任何作业正在运行。
使它起作用的一件事是在处于挂起状态(我在AWS上)时增加集群的大小。但是,这与我是否以6个工人启动集群并增加到7个无关紧要,还是如果我以7个工人启动并增加到8个无关紧要,这对我来说似乎有些奇怪。在这两种情况下,群集都在使用所有可用的内存,但是我没有遇到内存错误。
关于可能出什么问题的任何想法?