2016-04-20 5 views
6

मेरे पास एक जटिल डेटाफ्रेम संरचना है और आसानी से कॉलम को खाली करना चाहूंगा। मैंने अंतर्निहित कक्षाएं बनाई हैं जो तार कार्यक्षमता और आसानी से 2 डी डेटाफ्रेम संरचनाओं को संबोधित करती हैं लेकिन एक बार डेटाफ्रेम ऐरेटाइप या मैपटाइप के साथ अधिक जटिल हो जाने पर मुझे बहुत भाग्य नहीं मिला है। उदाहरण के लिए:एक जटिल नेस्टेड संरचना के साथ स्पार्क डेटाफ्रेम को कैसे संशोधित करें?

मैं स्कीमा को परिभाषित किया है के रूप में:

StructType(
    StructField(name,StringType,true), 
    StructField(data,ArrayType(
     StructType(
      StructField(name,StringType,true), 
      StructField(values, 
       MapType(StringType,StringType,true), 
      true) 
     ), 
     true 
    ), 
    true) 
) 

मैं एक नया DF क्षेत्र MapType की data.value अशक्त करने के लिए सेट है कि निर्माण करने के लिए चाहते हैं, लेकिन यह एक सरणी का एक तत्व है के रूप में मैं कैसे पता लगाने में सक्षम नहीं है। मैं यह करने के समान होगा लगता होगा:

df.withColumn("data.values", functions.array(functions.lit(null))) 

लेकिन यह अंततः data.values का एक नया स्तंभ बनाता है और डेटा सरणी के values तत्व को संशोधित नहीं करता है।

उत्तर

0

स्पार्क 1.6, इसलिए आप अपनी dataframes (बुलाया डेटासेट) को मैप करने के मामले कक्षाओं का उपयोग कर सकते हैं। फिर, आप अपना डेटा मैप कर सकते हैं और इसे अपनी इच्छित नई स्कीमा में बदल सकते हैं। उदाहरण के लिए:

case class Root(name: String, data: Seq[Data]) 
case class Data(name: String, values: Map[String, String]) 
case class NullableRoot(name: String, data: Seq[NullableData]) 
case class NullableData(name: String, value: Map[String, String], values: Map[String, String]) 

val nullableDF = df.as[Root].map { root => 
    val nullableData = root.data.map(data => NullableData(data.name, null, data.values)) 
    NullableRoot(root.name, nullableData) 
}.toDF() 

nullableDF की जिसके परिणामस्वरूप स्कीमा होगा:

root 
|-- name: string (nullable = true) 
|-- data: array (nullable = true) 
| |-- element: struct (containsNull = true) 
| | |-- name: string (nullable = true) 
| | |-- value: map (nullable = true) 
| | | |-- key: string 
| | | |-- value: string (valueContainsNull = true) 
| | |-- values: map (nullable = true) 
| | | |-- key: string 
| | | |-- value: string (valueContainsNull = true) 
संबंधित मुद्दे