SlideShare a Scribd company logo
1 of 87
Download to read offline
Untangling Healthcare
with Spark and Dataflow
Ryan Brush
@ryanbrush
Actual depiction of healthcare data
One out of six dollars
Three Acts
(Mostly)
Act I
Making sense of the pieces
answer = askQuestion (allHealthData)
8000 CPT Codes
72,000 ICD-10 Codes
63,000 SNOMED disease codes
Incomplete, conflicting data sets No common person identifier
Standard data models and codes interpreted inconsistently
Different meanings in different contexts
How do we make sense of this?
55 Million Patients 3 petabytes of data
Claims
Medical
Records
Pharma
Operational
Link Records
Semantic
Integration
User-entered
annotations
Condition
Registries
Quality
Measures
Analytics
Rules
Link Records
Claims
Medical
Records
Pharma
Operational
Semantic
Integration
User-entered
annotations
Condition
Registries
Quality
Measures
Analytics
Rules
Medical
Records
Document
Sections
Notes
Addenda
Order
. . .
Normalize
Structure
Clean Data
Link Records
Claims
Medical
Records
Pharma
Operational
Semantic
Integration
User-entered
annotations
Condition
Registries
Quality
Measures
Analytics
Rules
answer = askQuestion (allHealthData)
linkedData = link(clean (pharma),
clean (claims),
clean (records))
normalized = normalize(linkedData)
answer = askQuestion (normalized)
Rein in variance
http://fortune.com/2014/07/24/can-big-data-cure-cancer/
Rein in variance
oral vs. axillary temperature
Join all the things!


JavaRDD<ExternalRecord> externalRecords = ...





JavaRDD<ExternalRecord> externalRecords = ...



JavaPairRDD<ExternalRecord,
ExternalRecord> cartesian =
externalRecords.cartesian(externalRecords);





JavaRDD<Similarity> matches = cartesian.map(t -> {




})


return Similarity.newBuilder()

.setLeftRecordId(left.getExternalId())

.setRightRecordId(right.getExternalId())

.setScore(score)

.build();

ExternalRecord left = t._1();

ExternalRecord right = t._2();



double score = recordSimilarity(left, right);



.filter(s -> s.getScore() > THRESHOLD);
Person 1 Person 2 Person 3
Person 1 1 0.98 0.12
Person 2 1 0.55
Person 3 1
Reassembly Humpty Dumpty in Code


JavaPairRDD<String,String> idToLink = . . .
JavaPairRDD<String,ExternalRecord> idToRecord = . . .






JavaPairRDD<String,String> idToLink = . . .
JavaPairRDD<String,ExternalRecord> idToRecord = . . .


JavaRDD<Person> people = idToRecord.join(idToLink)

.mapToPair(

// Tuple of universal ID and external record.

item -> new Tuple2<>(item._2._2, item._2._1))

.groupByKey()

.map(SparkExampleTest::mergeExternalRecords);



SNOMED:388431003
HCPCS:J1815
ICD10:E13.9
CPT:3046F
SNOMED:43396009, value: 9.4
SNOMED:388431003
HCPCS:J1815
InsulinMed InsulinMed
ICD10:E13.9
DiabetesCondition
Diabetic
CPT:3046F SNOMED:43396009, value: 9.4
Retaking Rules for Developers, Strange Loop 2014
29
select * from outcomes where…
30
Start with the questions you want
to ask and transform the data to fit.
But what questions are
we asking?
“The problem is we don’t
understand the problem.”
-Paul MacReady
cleanData = clean (allHealthData)
projected = projectForPurpose (cleanData)
answer = askQuestion (projected)
Sepsis
Early Lessons
Make no assumptions
about your data
Your errors are a signal
Data sources have a signature
But the latency!
And the complexity!
Act II
Putting health care together…fast


JavaPairRDD<String,String> idToLink = . . .
JavaPairRDD<String,ExternalRecord> idToRecord = . . .


JavaRDD<Person> people = idToRecord.join(idToLink)

.mapToPair(

// Tuple of UUID and external record.

item -> new Tuple2<>(item._2._2, item._2._1))

.groupByKey()

.map(SparkExampleTest::mergeExternalRecords);





JavaPairDStream<String,String> idToLink = . . .
JavaPairDStream<String,ExternalRecord> idToRecord

= . . .


idToLink.join(idToRecord);


JavaPairDStream<String,String> idToLink = . . .
JavaPairDStream<String,ExternalRecord> idToRecord

= . . .


StateSpec personAndLinkStateSpec =
StateSpec.function(new BuildPersonState());
JavaDStream<Tuple2<List<ExternalRecord>,List<String>>>
recordsWithLinks =

idToRecord.cogroup(idToLink)

.mapWithState(personAndLinkStateSpec);



// And a lot more...
Link Updates
Record Updates
Grouped Record and Link Updates
Previous
State
Person
Records
Link Updates
Record Updates
Grouped Record and Link Updates
Previous
State
Person
Records
What about deletes?
Stream processing is not
“fast” batch processing.
Little reuse beyond core functions
Different pipeline semantics
Must implement compensation logic
Batch
Processing
Stream
Processing
Reusable Code
If you're willing to restrict the flexibility
of your approach, you can almost
always do something better.
-John Carmack
public void rollingMap(EntityKey key,
Long version,
T value,
Emitter emitter);
public void rollingReduce(EntityKey key,
S state,
Emitter emitter);
emitter.emit(key,value);
emitter.tombstone(outdatedKey);
Domain-Specific API
Batch Host Streaming Host
Reusable Code
So are we done?
Limited expressiveness
Not composable
Learning curve
Artificial complexity
Act III
Reframing the problem
Batch
Processing
Stream
Processing
Reusable Code
Batch
Processing
Stream
Processing
Kappa
Architecture
It’s time for a POSIX of data processing
Make everything a stream!
(If the technology can scale to your volume
and historical data.)
(If your problem can be expressed in monoids.)
Apache Beam
(was: Google Cloud Dataflow)
Potentially a POSIX of data processing
Composable Units (PTransforms)
Unification of Batch and Stream
Spark, Flink, Google Cloud Dataflow runners
Bounded: a fixed dataset
Unbounded: continuously updating dataset
Window: time range of your data to process
Trigger: when to process a time range
10:00 11:00 12:008:00 9:00
Windows and Triggers
10:00 11:00 12:008:00 9:00
Windows and Triggers
10:00 11:00 12:008:00 9:00
Windows and Triggers
10:00 11:00 12:008:00 9:00
Windows and Triggers
8:03 8:04 8:058:01 8:02
Windows and Triggers
public class LinkRecordsTransform extends
PTransform<PCollectionTuple,PCollection<Person>> {
}
public static final TupleTag<RecordLink> LINKS =
new TupleTag<>();


public static final TupleTag<ExternalRecord> RECORDS =
new TupleTag<>();
@Override

public PCollection<Person> apply(PCollectionTuple input) {
. . .
}
PCollection<KV<String,CoGbkResult>> cogrouped = KeyedPCollectionTuple

.of(LINKS, idToLinks)

.and(RECORDS, idToRecords)









// Combines by key AND window
return uuidToRecs.apply(

Combine.<String,ExternalRecord,Person>perKey(
new PersonCombineFn()))

.setCoder(KEY_PERSON_CODER)

.apply(Values.<Person>create());
PCollection<KV<String,ExternalRecord>> uuidToRecs = cogrouped.apply(

ParDo.of(new LinkExternalRecords()))

.setCoder(KEY_REC_CODER);
apply implementation:
.apply(CoGroupByKey.create());
PCollection<Person> people = PCollectionTuple

.of(LinkRecordsTransform.LINKS, windowedLinks)

.and(LinkRecordsTransform.RECORDS, windowedRecs)

.apply(new LinkRecordsTransform());


PCollection<RecordLink> windowedLinks = . . .
PCollection<ExternalRecord> windowedRecs = . . .
PCollection<RecordLink> windowedLinks = . . .
PCollection<Person> people = PCollectionTuple

.of(LinkRecordsTransform.LINKS, windowedLinks)

.and(LinkRecordsTransform.RECORDS, windowedRecs)

.apply(new LinkRecordsTransform());


PCollection<ExternalRecord> windowsRecs = . . .
PCollection<Person> people = PCollectionTuple

.of(LinkRecordsTransform.LINKS, windowedLinks)

.and(LinkRecordsTransform.RECORDS, windowedRecs)

.apply(new LinkRecordsTransform());


PCollection<RecordLink> windowedLinks = links.apply(

Window.<RecordLink>into(
FixedWindows.of(Duration.standardMinutes(60)));

PCollection<ExternalRecord> windowsRecs = . . .
PCollection<Person> people = PCollectionTuple

.of(LinkRecordsTransform.LINKS, windowedLinks)

.and(LinkRecordsTransform.RECORDS, windowedRecs)

.apply(new LinkRecordsTransform());


PCollection<RecordLink> windowedLinks = links.apply(

Window.<RecordLink>into(
FixedWindows.of(Duration.standardMinutes(60)))

.withAllowedLateness(Duration.standardMinutes(15))

.accumulatingFiredPanes());

PCollection<ExternalRecord> windowsRecs = . . .
PCollection<Person> people = PCollectionTuple

.of(LinkRecordsTransform.LINKS, windowedLinks)

.and(LinkRecordsTransform.RECORDS, windowedRecs)

.apply(new LinkRecordsTransform());


PCollection<RecordLink> windowedLinks = links.apply(

Window.<RecordLink>into(
FixedWindows.of(Duration.standardMinutes(60)))

.withAllowedLateness(Duration.standardMinutes(15))

.accumulatingFiredPanes());
.triggering(Repeatedly.forever(
AfterProcessingTime.pastFirstElementInPane()
.plusDelayOf(Duration.standardMinutes(10)))));
PCollection<ExternalRecord> windowsRecs = . . .
PCollection<Person> people = PCollectionTuple

.of(LinkRecordsTransform.LINKS, windowedLinks)

.and(LinkRecordsTransform.RECORDS, windowedRecs)

.apply(new LinkRecordsTransform());


PCollection<RecordLink> windowedLinks = links.apply(

Window.<RecordLink>into(
SlidingWindows.of(Duration.standardMinutes(120)))

.withAllowedLateness(Duration.standardMinutes(15))

.accumulatingFiredPanes());
.triggering(Repeatedly.forever(
AfterProcessingTime.pastFirstElementInPane()
.plusDelayOf(Duration.standardMinutes(10)))));
PCollection<ExternalRecord> windowsRecs = . . .
PCollection<Person> people = PCollectionTuple

.of(LinkRecordsTransform.LINKS, windowedLinks)

.and(LinkRecordsTransform.RECORDS, windowedRecs)

.apply(new LinkRecordsTransform());


PCollection<RecordLink> windowedLinks = links.apply(

PCollection<ExternalRecord> windowsRecs = . . .
Window.<RecordLink>into(new GlobalWindows())
.triggering(Repeatedly.forever(
AfterProcessingTime.pastFirstElementInPane().

plusDelayOf(Duration.standardMinutes(5))))

.accumulatingFiredPanes());
when was that data created?
what data have I received?
when should I process that data?
how should I group data to process?
what to do with late-arriving data?
should I emit preliminary results?
how should I amend those results?
Untangling Concerns
Simple Made Easy
Rich Hickey, Strange Loop 2011
Modular
Composable
Easier to reason about
But some caveats:
Runners at varying level of maturity
Retraction not yet implemented (see BEAM-91)
APIs may change
MLLib
REPLDataframes
Spark offers a rich ecosystem
Spark SQL
Genome Analysis Toolkit
Large, complex,
processing pipelines
Exploration and
transformation of data
Two classes of problems:
Actual depiction of healthcare data
Time
Understanding
Orientation
Pattern
Discovery
Prescriptive
Frameworks
Scalable
Processing
Web Development
Time
Understanding
Orientation
Pattern
Discovery
Prescriptive
Frameworks
Scalable
Processing Web Development
Focus on the essence
rather than the accidents.
Questions?
@ryanbrush

More Related Content

Similar to Untangling Healthcare With Spark and Dataflow - PhillyETE 2016

Agile Data Science 2.0
Agile Data Science 2.0Agile Data Science 2.0
Agile Data Science 2.0Russell Jurney
 
Agile Data Science 2.0
Agile Data Science 2.0Agile Data Science 2.0
Agile Data Science 2.0Russell Jurney
 
Agile Data Science 2.0 - Big Data Science Meetup
Agile Data Science 2.0 - Big Data Science MeetupAgile Data Science 2.0 - Big Data Science Meetup
Agile Data Science 2.0 - Big Data Science MeetupRussell Jurney
 
Rescuing Data from Decaying and Moribund Clinical Information Systems
Rescuing Data from Decaying and Moribund Clinical Information SystemsRescuing Data from Decaying and Moribund Clinical Information Systems
Rescuing Data from Decaying and Moribund Clinical Information SystemsHealth Informatics New Zealand
 
Oleksandr Valetskyy - DI vs. IoC
Oleksandr Valetskyy - DI vs. IoCOleksandr Valetskyy - DI vs. IoC
Oleksandr Valetskyy - DI vs. IoCOleksandr Valetskyy
 
QUERY INVERSION TO FIND DATA PROVENANCE
QUERY INVERSION TO FIND DATA PROVENANCE QUERY INVERSION TO FIND DATA PROVENANCE
QUERY INVERSION TO FIND DATA PROVENANCE cscpconf
 
Beyond PHP - It's not (just) about the code
Beyond PHP - It's not (just) about the codeBeyond PHP - It's not (just) about the code
Beyond PHP - It's not (just) about the codeWim Godden
 
Agile Data Science 2.0
Agile Data Science 2.0Agile Data Science 2.0
Agile Data Science 2.0Russell Jurney
 
Open Analytics Environment
Open Analytics EnvironmentOpen Analytics Environment
Open Analytics EnvironmentIan Foster
 
Agile Data Science 2.0: Using Spark with MongoDB
Agile Data Science 2.0: Using Spark with MongoDBAgile Data Science 2.0: Using Spark with MongoDB
Agile Data Science 2.0: Using Spark with MongoDBRussell Jurney
 
ADO.NET Entity Framework by Jose A. Blakeley and Michael Pizzo
ADO.NET Entity Framework by Jose A. Blakeley and Michael PizzoADO.NET Entity Framework by Jose A. Blakeley and Michael Pizzo
ADO.NET Entity Framework by Jose A. Blakeley and Michael PizzoHasnain Iqbal
 
GDG Jakarta Meetup - Streaming Analytics With Apache Beam
GDG Jakarta Meetup - Streaming Analytics With Apache BeamGDG Jakarta Meetup - Streaming Analytics With Apache Beam
GDG Jakarta Meetup - Streaming Analytics With Apache BeamImre Nagi
 
Agile Data Science 2.0
Agile Data Science 2.0Agile Data Science 2.0
Agile Data Science 2.0Russell Jurney
 
Tools and Techniques for Understanding Threading Behavior in Android*
Tools and Techniques for Understanding Threading Behavior in Android*Tools and Techniques for Understanding Threading Behavior in Android*
Tools and Techniques for Understanding Threading Behavior in Android*Intel® Software
 
MIS5101 WK10 Outcome Measures
MIS5101 WK10 Outcome MeasuresMIS5101 WK10 Outcome Measures
MIS5101 WK10 Outcome MeasuresSteven Johnson
 
Distributed Queries in IDS: New features.
Distributed Queries in IDS: New features.Distributed Queries in IDS: New features.
Distributed Queries in IDS: New features.Keshav Murthy
 
Predictive Analytics with Airflow and PySpark
Predictive Analytics with Airflow and PySparkPredictive Analytics with Airflow and PySpark
Predictive Analytics with Airflow and PySparkRussell Jurney
 
Beyond PHP - it's not (just) about the code
Beyond PHP - it's not (just) about the codeBeyond PHP - it's not (just) about the code
Beyond PHP - it's not (just) about the codeWim Godden
 

Similar to Untangling Healthcare With Spark and Dataflow - PhillyETE 2016 (20)

Agile Data Science 2.0
Agile Data Science 2.0Agile Data Science 2.0
Agile Data Science 2.0
 
Agile Data Science 2.0
Agile Data Science 2.0Agile Data Science 2.0
Agile Data Science 2.0
 
Agile Data Science 2.0 - Big Data Science Meetup
Agile Data Science 2.0 - Big Data Science MeetupAgile Data Science 2.0 - Big Data Science Meetup
Agile Data Science 2.0 - Big Data Science Meetup
 
Agile Data Science
Agile Data ScienceAgile Data Science
Agile Data Science
 
Rescuing Data from Decaying and Moribund Clinical Information Systems
Rescuing Data from Decaying and Moribund Clinical Information SystemsRescuing Data from Decaying and Moribund Clinical Information Systems
Rescuing Data from Decaying and Moribund Clinical Information Systems
 
Oleksandr Valetskyy - DI vs. IoC
Oleksandr Valetskyy - DI vs. IoCOleksandr Valetskyy - DI vs. IoC
Oleksandr Valetskyy - DI vs. IoC
 
QUERY INVERSION TO FIND DATA PROVENANCE
QUERY INVERSION TO FIND DATA PROVENANCE QUERY INVERSION TO FIND DATA PROVENANCE
QUERY INVERSION TO FIND DATA PROVENANCE
 
Beyond PHP - It's not (just) about the code
Beyond PHP - It's not (just) about the codeBeyond PHP - It's not (just) about the code
Beyond PHP - It's not (just) about the code
 
Agile Data Science 2.0
Agile Data Science 2.0Agile Data Science 2.0
Agile Data Science 2.0
 
Open Analytics Environment
Open Analytics EnvironmentOpen Analytics Environment
Open Analytics Environment
 
Agile Data Science 2.0: Using Spark with MongoDB
Agile Data Science 2.0: Using Spark with MongoDBAgile Data Science 2.0: Using Spark with MongoDB
Agile Data Science 2.0: Using Spark with MongoDB
 
ADO.NET Entity Framework by Jose A. Blakeley and Michael Pizzo
ADO.NET Entity Framework by Jose A. Blakeley and Michael PizzoADO.NET Entity Framework by Jose A. Blakeley and Michael Pizzo
ADO.NET Entity Framework by Jose A. Blakeley and Michael Pizzo
 
GDG Jakarta Meetup - Streaming Analytics With Apache Beam
GDG Jakarta Meetup - Streaming Analytics With Apache BeamGDG Jakarta Meetup - Streaming Analytics With Apache Beam
GDG Jakarta Meetup - Streaming Analytics With Apache Beam
 
XML-RPC vs Psycopg2
XML-RPC vs Psycopg2XML-RPC vs Psycopg2
XML-RPC vs Psycopg2
 
Agile Data Science 2.0
Agile Data Science 2.0Agile Data Science 2.0
Agile Data Science 2.0
 
Tools and Techniques for Understanding Threading Behavior in Android*
Tools and Techniques for Understanding Threading Behavior in Android*Tools and Techniques for Understanding Threading Behavior in Android*
Tools and Techniques for Understanding Threading Behavior in Android*
 
MIS5101 WK10 Outcome Measures
MIS5101 WK10 Outcome MeasuresMIS5101 WK10 Outcome Measures
MIS5101 WK10 Outcome Measures
 
Distributed Queries in IDS: New features.
Distributed Queries in IDS: New features.Distributed Queries in IDS: New features.
Distributed Queries in IDS: New features.
 
Predictive Analytics with Airflow and PySpark
Predictive Analytics with Airflow and PySparkPredictive Analytics with Airflow and PySpark
Predictive Analytics with Airflow and PySpark
 
Beyond PHP - it's not (just) about the code
Beyond PHP - it's not (just) about the codeBeyond PHP - it's not (just) about the code
Beyond PHP - it's not (just) about the code
 

Recently uploaded

Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfkalichargn70th171
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software DevelopersVinodh Ram
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️anilsa9823
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantAxelRicardoTrocheRiq
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfjoe51371421
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AIABDERRAOUF MEHENNI
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...soniya singh
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 

Recently uploaded (20)

Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
Exploring iOS App Development: Simplifying the Process
Exploring iOS App Development: Simplifying the ProcessExploring iOS App Development: Simplifying the Process
Exploring iOS App Development: Simplifying the Process
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software Developers
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdf
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 

Untangling Healthcare With Spark and Dataflow - PhillyETE 2016