我现在在我的第一份工作,涉及火花。代码是用Java编写的。
我目前的任务是继续执行以前的开发工具所遗留下来的内容。
任务本身并不是很困难,但它的背景是:
之前的Dev编写了规则,只有一个特定的类(这些类变得非常大,比如上千行)中的联接也有一个巨大的主类。
我可以很容易地遵循同样的过程,并使这些课程更大,但我发现这是极其恼人的阅读和维护的未来。
就目前而言,我对项目进行了如下包的重组:
但我也怀疑我自己的方法,我在公司里没有高级职位可依赖。
公共类CurrencyService {私有最终数据集currencyReference;//构造函数公共数据集applyCurrencyConversion(Dataset targetDataset){ //目标联接引用并应用转换}私有列转换(列targetColumn){ //转换规则} }
dsA.join(dsB, Sequence of (joinKeys)).的操作
最后,我觉得我在更多地使用代码,而以前的“单类”样式更容易理解,但不容易维护.
我有“公安条例”的背景,所以这个项目太面向对象了吗?
发布于 2021-10-28 14:18:37
这是一个非常广泛和令人印象深刻的问题:) --我希望开发人员在启动项目时具备这样的成熟度。
管道
您正在构建管道,我建议您遵循以下命令:
<代码>H19将数据保存为检查点/最终结果<代码>H 210<代码>G 211

如果遵循此关系图,则不应在“黄金区域”之后应用规则,除非您处理特定的子项目。
转换
对于组织转换,静态函数是非常好的,特别是在继承现有的(工作?)项目。对于未来的规则或项目,我会有一些不同的想法(例如,您可以构建一个小规则引擎,其中将规则添加到列表中并立即执行)。
接合
对于连接,如果您有复杂的连接,您可以想象隔离它们,但是隔离id列的想法是好的:它更多地是元数据驱动的。在一些项目中,我创建了一个"SuperDataframe“对象,在该对象中,我可以向dataframe添加一些丢失的智能信息。您还可以向任何列添加自定义元数据,并让您的规则使用:签出https://github.com/jgperrin/net.jgp.labs.spark/blob/master/src/main/java/net/jgp/labs/spark/l090_metadata/l000_add_metadata/AddMetadataApp.java。看上去:
Metadata metadata = new MetadataBuilder()
.putString("x-source", filename)
.putString("x-format", format)
.putLong("x-order", i++)
.build();
df = df.withColumn(colName, col, metadata);一般意见
Dataset<Row>),而不是用于性能optimization.的数据集/RDD
你的轨道很好!
https://stackoverflow.com/questions/69752458
复制相似问题