Comments (6)
Hi Alex!
First I would like to thank you for interest in this library and for your wish to contribute!
I think that what you want to add is valuable.
Unfortunately, when designing the writer I didn't think of state. I would even tell I wanted to avoid it. You are right, introducing it would break current API - and we cannot do it just like that, because the library is already in use by many people. I would like to do the release with breaking changes in 1.0.0 version when all features are already there and library ends his child age.
The only idea I have at this moment is just to add a separate trait for a new solution. We can use also Java's Closeable trait, eg.:
object IncrementalParquetWriter {
def apply[T: ParquetRecordEncoder : ParquetSchemaResolver](path: String, options: ParquetWriter.Options): IncrementalParquetWriter[T] =
new IncrementalParquetWriter[T] {
private val writer = internalWriter(new Path(path), ParquetSchemaResolver.resolveSchema[T], options)
private val valueCodecConfiguration = options.toValueCodecConfiguration
override def write(data: Iterable[T]): Unit =
data.foreach { elem =>
writer.write(ParquetRecordEncoder.encode[T](elem, valueCodecConfiguration))
}
override def close(): Unit = writer.close()
}
}
trait IncrementalParquetWriter[T] extends Closeable {
def write(data: Iterable[T])
}
I would not modify existing IT tests but add a simple separate one that just checks if new incremental writer works as intended (including edge cases).
from parquet4s.
I see. Thanks, I'll take another pass at that here in a minute. What edge cases do you have in mind here?
from parquet4s.
Cool!
Regarding edge cases I mean:
- Writing with closed reader
- Closing writer without writing anything with it.
- Whatever else you come up with :)
from parquet4s.
Sounds good. I opened a new PR with this implementation. It's similar to my second PR but doesn't mess with all the type parameters.
from parquet4s.
I am merging your PR but let me do some changes to it before release. I would like to replace isClosed var to something more thread-safe. [EDIT] Just noticed that you used synchronised :)
from parquet4s.
Great! Looking forward to the release. Closing this issue. thanks for the quick review and merge.
from parquet4s.
Related Issues (20)
- An example for writing a required or optional value codec for custom type with more than one field. HOT 6
- Is schema backwards compatibility on projections possible? HOT 1
- Options `ParquetFileWriter.Mode.OVERWRITE` not deleting old parquet files in S3 HOT 1
- failed to read parquet generated by pandas HOT 5
- Add Pekko support HOT 4
- Is it possible to write a file without Akka or Fs2 integration? HOT 2
- `ParquetReader.projectedGeneric` does not work when selecting more than one column from a same group HOT 5
- Reading from gcs bucket HOT 1
- Do not publish a pekko/akko versions of scapapb module HOT 1
- missing tail records of large(~193M) parquet files HOT 4
- Protobuf enums deserialisation HOT 3
- compatible parquet-hadoop with spark3.1 HOT 3
- Unsure how to use for 'semiauto' approach HOT 2
- ParquetSchemaResolver test fails on recent JVMs HOT 1
- [akka/pekko] Too many paths created during record partitioning HOT 2
- [RFC] Refactor timestamp codecs HOT 2
- Feature request: Expose partitions as a `Stream[F, Stream[F, Record]]` for FS2 HOT 5
- Incorrect value after reading parquet HOT 7
- [Question] get a listing of parquet files? HOT 4
- [Question] Is there a mechanism to detect when the `rotatingWriter` finishes writing to a file and to be notified of the file that was written? HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from parquet4s.