PySpark, создайте линейный график из фрейма данных без «категории» в блоках данных - PullRequest
0 голосов
/ 05 марта 2019

Я использую следующий код для блоков данных:

dataToShow = jDataJoined.\
withColumn('id', monotonically_increasing_id()).\
filter( 
  (jDataJoined.containerNumber == 'SUDU8108536')).\
select(col('id'), col('returnTemperature'), col('supplyTemperature'))

Это даст мне табличные данные, такие как

tabular data

Теперь я хотел бы отобразить линейный график с этими returnTempera и supplyTempera как категории.

Насколько я понял, метод display в кирпичах данных хочет в качестве второго аргумента категорию, поэтому в основном то, что я должен иметь, эточто-то вроде

id - temperatureCategory - value
1 - returnTemperature - 25.0
1 - supplyTemperature - 27.0
2 - returnTemperature - 24.0
2 - supplyTemperature - 28.0

Как я могу преобразовать фрейм данных таким образом?

1 Ответ

0 голосов
/ 07 марта 2019

Я не знаю, соответствует ли ваш формат методу отображения, но вы можете выполнить это преобразование с помощью функций sql create_map и explode :

#creates a example df
from pyspark.sql import functions as F
l1 = [(1,25.0,27.0),(2,24.0,28.0)]
df = spark.createDataFrame(l1,['id','returnTemperature','supplyTemperature'])

#creates a map column which contains the values of the returnTemperature and supplyTemperature
df = df.withColumn('mapCol', F.create_map(
                                    F.lit('returnTemperature'),df.returnTemperature
                                    ,F.lit('supplyTemperature'),df.supplyTemperature
                                   ) 
                  )
#The explode function creates a new row for each element of the map
df = df.select('id',F.explode(df.mapCol).alias('temperatureCategory','value'))
df.show()

Выход:

+---+-------------------+-----+ 
| id|temperatureCategory|value| 
+---+-------------------+-----+ 
| 1 |  returnTemperature| 25.0| 
| 1 |  supplyTemperature| 27.0| 
| 2 |  returnTemperature| 24.0| 
| 2 |  supplyTemperature| 28.0| 
+---+-------------------+-----+
...