/ / Chyba pri zobrazovaní množstva výsledku pre Spark Dataframe - scala, apache-spark, apache-spark-sql

Chyba pri zobrazovaní množstva výsledku pre Spark Dataframe - scala, apache-spark, apache-spark-sql

Nikdy o tom som nepočul, ale stane sa tu:

Mám dátový rámec generovaný pomocou operácie sqlContext.sql v Scale. Pravdepodobne by malo byť 12 záznamov, ako je uvedené v jeho zdroji údajov mysql.

Keď používam:

result.show(7)

7 výsledky sú zobrazené normálne; Keď používam:

result.show(8)

Dostal som nasledujúcu chybu:

18/03/05 21:02:48 INFO HadoopRDD: Vstupné rozdelenie: HDFS: //nn01.itversity.com: 8020 / užívateľ / paslechoix / produkty / časť M-00000: 0 + 86996 18/03/05 21:02:48 INFO BlockManagerInfo: Odstránené broadcast_20_piece0 na localhost: 42892 v pamäti (veľkosť: 2008.0 B, zadarmo: 511.1 MB) 18/03/05 21:02:48 ERROR Executor: Výnimka v úlohe 0.0 v etape 19.0 (TID 22) java.lang.NumberFormatException: prázdny reťazec at sun.misc.FloatingDecimal.readJavaFormatString (FloatingDecimal.java:1842) pri sun.misc.FloatingDecimal.parseFloat (FloatingDecimal.java:122)

Veľmi by som ocenil, keby mi niekto povedal, čo tu nie je?

Očakávaný výsledok z mysql je uvedený nižšie pre vašu referenciu:

    mysql> select * from products where product_name like "Per%";
+------------+---------------------+--------------------------------------------+---------------------+---------------+----------------------------------------------------------------------------+
| product_id | product_category_id | product_name                               | product_description | product_price | product_image                                                              |
+------------+---------------------+--------------------------------------------+---------------------+---------------+----------------------------------------------------------------------------+
|        362 |                  17 | Perfect Fitness Perfect Ab Strap Pro       |                     |         29.99 | http://images.acmesports.sports/Perfect+Fitness+Perfect+Ab+Strap+Pro       |
|        365 |                  17 | Perfect Fitness Perfect Rip Deck           |                     |         59.99 | http://images.acmesports.sports/Perfect+Fitness+Perfect+Rip+Deck           |
|        372 |                  17 | Perfect Ab Carver Pro                      |                     |         39.99 | http://images.acmesports.sports/Perfect+Ab+Carver+Pro                      |
|        373 |                  17 | Perfect Fitness Multi Gym Pro              |                     |         39.99 | http://images.acmesports.sports/Perfect+Fitness+Multi+Gym+Pro              |
|        374 |                  17 | Perfect Pushup BASIC                       |                     |         19.99 | http://images.acmesports.sports/Perfect+Pushup+BASIC                       |
|        376 |                  17 | Perfect Pushup V2 Performance              |                     |         29.99 | http://images.acmesports.sports/Perfect+Pushup+V2+Performance              |
|        377 |                  17 | Perfect Pullup Basic                       |                     |         19.99 | http://images.acmesports.sports/Perfect+Pullup+Basic                       |
|        379 |                  17 | Perfect Multi-Gym - As Seen on TV!         |                     |         29.99 | http://images.acmesports.sports/Perfect+Multi-Gym+-+As+Seen+on+TV%21       |
|       1013 |                  46 | Perception Sport Swifty Deluxe 9.5 Kayak   |                     |        349.99 | http://images.acmesports.sports/Perception+Sport+Swifty+Deluxe+9.5+Kayak   |
|       1030 |                  46 | Perception Sport Striker 11.5 Angler Kayak |                     |        499.99 | http://images.acmesports.sports/Perception+Sport+Striker+11.5+Angler+Kayak |
|       1065 |                  48 | Perception Sport Swifty Deluxe 9.5 Kayak   |                     |        349.99 | http://images.acmesports.sports/Perception+Sport+Swifty+Deluxe+9.5+Kayak   |
|       1093 |                  49 | Perception Sport Swifty Deluxe 9.5 Kayak   |                     |        349.99 | http://images.acmesports.sports/Perception+Sport+Swifty+Deluxe+9.5+Kayak   |
+------------+---------------------+--------------------------------------------+---------------------+---------------+----------------------------------------------------------------------------+

Ak spustím nasledujúci skript:

val results12 = sqlContext.sql("SELECT * FROM products")
results12.show()

Vráti štandardne 20 záznamov bez chyby.

Ak potrebujete ďalšie informácie z chyby, dajte mi vedieť a ja uverejním celé chybové hlásenie. Ďakujem mnohokrát.

Aktualizácia 1:

Ak to urobím:

val result2 = sqlContext.sql("select * from products where productID = 379")
result2.show(1)

Zobrazí sa nasledujúca chyba:

java.lang.NumberFormatException: prázdny reťazec

Zdá sa, že problém spôsobuje 379.

Pokračujem s 377, rovnaké chybové hlásenie, keď show(1).

Nechápem však, že 377 je zahrnuté vo výsledku1:

val result1 = sqlContext.sql("select * from products where name like "Per%"")

scala> result1.show(7)

+---------+-----------+--------------------+--------+-----+--------------------+
|productID|productCode|                name|quantity|price|               image|
+---------+-----------+--------------------+--------+-----+--------------------+
|      362|         17|Perfect Fitness P...|        |29.99|http://images.acm...|
|      365|         17|Perfect Fitness P...|        |59.99|http://images.acm...|
|      372|         17|Perfect Ab Carver...|        |39.99|http://images.acm...|
|      373|         17|Perfect Fitness M...|        |39.99|http://images.acm...|
|      374|         17|Perfect Pushup BASIC|        |19.99|http://images.acm...|
|      376|         17|Perfect Pushup V2...|        |29.99|http://images.acm...|
|      377|         17|Perfect Pullup Basic|        |19.99|http://images.acm...|
+---------+-----------+--------------------+--------+-----+--------------------+
only showing top 7 rows

odpovede:

1 pre odpoveď č. 1

Nakoniec som túto otázku vyriešil.

V pôvodných údajoch sú záznamy s cenovým stĺpcom prázdnym, nie nulovým.

Takže keď sú dáta konvertované na RDD, chyby sa už vyskytli p.split ( "") (4) .toFloat v príkaze nižšie:

val prdRDD = prd.map(p=>(p.split(",")(0).toInt, p.split(",")(1), p.split(",")(2), p.split(",")(3), p.split(",")(4).toFloat,p.split(",")(5)))

Riešením je prepísať prdRDD na:

val prdRDD = prd.map(p=>p.split(",")).map(p=>(p(0).toInt, p(1), p(2), p(3), { if( p(4)==null ||  p(4)=="" ) p(4)=0 else p(4).toFloat },p(5)))

Týmto spôsobom zabezpečíme, že p (4) môže byť prevedený na Float.

Potom celý skript funguje podľa očakávania.

Ďakujem všetkým za osvietenie.


0 pre odpoveď č. 2

Môžem predpokladať java.lang.NumberFormatException: prázdny reťazec a sun.misc.FloatingDecimal.parseFloat (FloatingDecimal.java:122) že tieto môžu byť hlavnou príčinou problému. Možno nevyfiltrujete prázdne hodnoty. Pokúste sa ich vyfiltrovať pomocou nástroja DataFrame.na.fill (). Vidím na vašom df, že máte stĺpec product_price, ktorý je 1. kandidátom na spôsobenie problému, a preto sa pokúste spravovať prázdne hodnoty pre tento prvý. Napríklad :

df.na.fill(Map(
"product_price" -> 0.0
))