2017-06-14 4 views
0

Ich möchte eine Zusammenfassung von dataframe machen. Ich habe ein paar Ausgaben. Ich möchte die drei dataframe in eine dataframe kombinieren, die genau wie die erste sein wird.fügen Sie Datenrahmen zu einem anderen

Hier ist was ich getan habe.

// Compute column summary statistics. 
val spark = SparkSession.builder.master("local").appName("my-spark-app").getOrCreate() 
val dataframe = spark.read.option("header", true).option("inferSchema", true).format("com.databricks.spark.csv").load("C:/Users/mhattabi/Desktop/donnee/cassandraTest_1.csv") 
val colNames=dataframe.columns 
val data=dataframe.describe().show() 

+-------+-------------------+-------------------+-------------------+-------------------+-------------------+ 
|summary|    Col0|    Col1|    Col2|    Col3|    Col4| 
+-------+-------------------+-------------------+-------------------+-------------------+-------------------+ 
| count|    9999|    9999|    9999|    9999|    9999| 
| mean| 0.4976937166129511| 0.5032998128645433| 0.5002933978916888| 0.5008783202471074|0.49977372871783293| 
| stddev| 0.2893201326892155|0.28767789122296994|0.29041197844235034|0.28989958496291496| 0.2881033430504947| 
| min|4.92436811557243E-6|3.20277176946531E-5|1.41602940923349E-5|6.53252937203857E-5| 5.4864212896146E-5| 
| max| 0.999442967120299| 0.9999608020298| 0.999968873336897| 0.999836584087385| 0.999822016805327| 
+-------+-------------------+-------------------+-------------------+-------------------+-------------------+ 
println("Skewness") 
val Skewness = dataframe.columns.map(c => skewness(c).as(c)) 
val Skewness_ = dataframe.agg(Skewness.head, Skewness.tail: _*).show() 

Schiefe

+--------------------+--------------------+--------------------+--------------------+--------------------+ 
    |    Col0|    Col1|    Col2|    Col3|    Col4| 
    +--------------------+--------------------+--------------------+--------------------+--------------------+ 
    |0.015599787007160271|-0.00740111491496...|0.006096695102089171|0.003614431405637598|0.007869663345343194| 
    +--------------------+--------------------+--------------------+--------------------+--------------------+ 
    println("Kurtosis") 
    val Kurtosis = dataframe.columns.map(c => kurtosis(c).as(c)) 
    val Kurtosis_ = dataframe.agg(Kurtosis.head, Kurtosis.tail: _*).show//kurtosis 
Kurtosis 
+-------------------+-------------------+-------------------+-------------------+------------------+ 
|    Col0|    Col1|    Col2|    Col3|    Col4| 
+-------------------+-------------------+-------------------+-------------------+------------------+ 
|-1.2187774053075133|-1.1861812968784207|-1.2107252263053805|-1.2108988817869097|-1.199054929668751| 
+-------------------+-------------------+-------------------+-------------------+------------------+ 

Ich mag würde zu Schiefe und Kurtosis der hinzuzufügen dataframe zum ersten und fügen Sie ihre Namen in den ersten colummns. mit withColumn

val Skewness_ = dataframe.agg(Skewness.head, Skewness.tail: _*).withColumn("summary", lit("Skewness")) 

Machen Sie dasselbe für Kurtosis

val Kurtosis_ = dataframe.agg(Kurtosis.head, Kurtosis.tail: _*).withColumn("summary", lit("Kurtosis")) 

Verwenden

Vielen Dank im Voraus

+0

ich falsch verstehe Ihre Frage und veröffentlichte eine falsche Antwort, sorry. Gelöscht, ich werde sehen, ob ich eine sinnvolle Antwort finden kann. – stefanobaghino

Antwort

0

müssen Sie summary Spalte zu beiden skewness und kurtosis Tabellen hinzuzufügen Select in allen dataframes zu haben Sie die column Namen in der Reihenfolge

val orderColumn = Vector("summary", "col0", "col1", "col2", "col3", "col4") 
val Skewness_ordered = Skewness_.select(orderColumn.map(col):_*) 
val Kurtosis_ordered = Kurtosis_.select(orderColumn.map(col):_*) 

und union sie.

val combined = dataframe.union(Skewness_ordered).union(Kurtosis_ordered) 
+0

es dauerte zu viel Zeit, besonders wenn es um riesige Datenmengen ging, gibt es eine Möglichkeit, es schneller zu machen? Vielen Dank –

+0

Ich denke, das ist die Art, wie ich weiß. :) –

0

In eleganter Weise können Sie Ihren Datenrahmen Schiefe und Kurtosis mit anfänglichen einer neuen Datenrahmen als kombinieren:

import org.apache.spark.sql.functions._ 

val result = dataframe.union(Skewness.select(lit("Skewness"),Skewness.col("*"))) 
     .union(Kurtosis.select(lit("Kurtosis"),Kurtosis.col("*"))) 

result.show() 
+0

unionAll ist veraltet – Gevorg

Verwandte Themen