วิธีใช้ RProtobuf เพื่อแมปประเภทฐาน R หรือวัตถุ SEXP

ฉันคิดว่ามันเป็นไปได้ แต่ฉันกำลังมองหาวิธีแมปประเภทฐานใน R โดยใช้แพ็คเกจ rprotobuf สิ่งที่ฉันต้องการคือการสร้างเครือข่าย/เซิร์ฟเวอร์ที่คล้ายกับ Rserve มาก แต่ใช้บัฟเฟอร์โปรโตคอลเพื่อทำให้ข้อมูลเป็นอนุกรมแทนที่จะเป็นโปรโตคอล QAP ของ Rserve คำถามของฉันคือ เป็นไปได้อย่างไรที่จะแมปบางอย่างเช่น data.frame ลงในบัฟเฟอร์โปรโตคอล นี่คือตัวอย่างของสิ่งที่ฉันต้องการให้มีลักษณะเช่นนี้ แต่โปรดแจ้งให้เราทราบหากฉันทำผิดวิธี

message TextCell {
   required string name = 1;
}

message NumericCell {
   repeated int32 num 1;
}

message TextColumn {
   repeated TextCell text 1;
}

message NumericColumn {
   repeated NumericCell number 1;
}

message DataFrame {
  optional NumericColumn numbericColumn = 1;
  optional TextColumn textColumns = 2;
}

ฉันล้อเลียนสิ่งนี้เมื่อกี้ ดังนั้นมันอาจจะมีข้อผิดพลาด แต่นี่คือแนวคิดที่ฉันกำลังดูอยู่ และมันไม่ได้คำนึงถึงสิ่งต่าง ๆ เช่น Doubles ซึ่งดูเหมือนเป็นความคิดที่ไม่ดี อาจเป็นทางออกที่ดีกว่าหรือไม่ถ้าใช้ประเภทไบต์และดีซีเรียลไลซ์คอลัมน์ในอีกด้านหนึ่ง ยังไม่แน่ใจว่าจะโจมตีปัญหานี้อย่างไร และข้อเสนอแนะจะได้รับการชื่นชมอย่างมากจากผู้มีความรู้มากขึ้น

หมายเหตุ ฉันต้องการใช้บัฟเฟอร์โปรโตคอลเนื่องจากประสิทธิภาพในการจัดเก็บข้อมูลและความเป็นไปได้ที่จะใช้ภาษาอื่น ๆ อีกมากมาย แต่โปรโตคอล QAP ก็ไม่มีอะไรผิดปกติ มันรวดเร็วและมีประสิทธิภาพมาก

ขอบคุณล่วงหน้า


person Chris Hinshaw    schedule 27.09.2013    source แหล่งที่มา
comment
ฉันพบว่าโค้ด Rhipe ทำบางอย่างเกือบจะเหมือนกับสิ่งที่ฉันต้องการทำทุกประการ github.com/saptarshiguha/RHIPE/blob/master/ รหัส/R/src/   -  person Chris Hinshaw    schedule 28.09.2013


คำตอบ (1)


เราได้รวมสคีมาบัฟเฟอร์โปรโตคอลที่รับทั้งหมดสำหรับอ็อบเจ็กต์ R จาก RHIPE เข้ากับ RProtoBuf และฟังก์ชันใหม่ serialize_pb และ unserialize_pb เพื่อแปลงอ็อบเจ็กต์ R ตามอำเภอใจ เช่น data.frames ให้เป็นบัฟเฟอร์โปรโตคอล ตัวอย่างเช่น:

msg <- tempfile();
serialize_pb(iris, msg);
obj <- unserialize_pb(msg);
identical(iris, obj);

ฟังก์ชันนี้ถูกนำมาใช้ใน RProtoBuf 0.4 ซึ่งออกมาหลังจากคำถามของคุณ เดิมทีถูกถาม ดูเอกสาร JSS ฉบับพิมพ์ล่วงหน้าของเราที่แนะนำคุณสมบัติใหม่เหล่านี้ใน arXiv : RProtoBuf: การทำให้ข้อมูลเป็นอนุกรมข้อมูลข้ามภาษาที่มีประสิทธิภาพใน R

person MurrayStokely    schedule 22.02.2014
comment
ว้าว ผมก็เพิ่งทำเสร็จเหมือนกันครับ ฉันได้รวมมันเข้ากับ jni เพื่อให้สามารถใช้มันในคลัสเตอร์ Hadoop ของฉันได้ ฉันพบปัญหาบางอย่างในการแปลงปัจจัย INTSXP แต่พบคำแนะนำบางประการใน Rcpp ขอบคุณสำหรับการอัปเดต ฉันจะลองใช้ RProtoBuf 0.4 และดูว่าฉันสามารถรวมมันเข้ากับโค้ดของฉันได้หรือไม่ - person Chris Hinshaw; 22.02.2014