為了我在大學的課程,我運行pyspark-notebook docker image
。docker pull jupyter/pyspark-notebook
docker run -it --rm -p 8888:8888 -v /path/to/my/working/directory:/home/jovyan/work jupyter/pyspark-notebook
然后運行下一個python代碼
import pyspark
from pyspark.sql import SparkSession
from pyspark.sql.type import *
sc = pyspark.SparkContext('local[*]'/span>)
spark = SparkSession(sc)
火花
listings_df = spark.read.csv("listings.csv", header=True, mode='DROPMALFORMED')
# 在上面一行中加入encoding="utf8 "也沒有幫助。
listings_df.printSchema()
問題出現在讀取檔案時。似乎 spark 讀取我的檔案不正確(可能是因為編碼問題?),在讀取 listings_df 有 16494 行,而正確的行數是 16478(用 pandas.read_csv() 檢查)。你可以通過運行
listings_df.groupBy("room_type"/span>).count().show()
這就給出了下一個輸出
--------------- -----
| room_type|count|
--------------- -----
| 169| 1|
| 4.88612| 1|
| 4.90075| 1|
| 共用房間| 44|
| 35| 1|
| 187| 1|
| null| 16|
| 70| 1|
| 27| 1|
| 75| 1|
| 酒店房間| 109|
| 198| 1|
| 60| 1|
| 280| 1|
|整個家庭/apt|12818|
|220| 1|
| 190| 1|
| 156| 1|
| 450| 1|
| 4.88865| 1|
--------------- -----
只顯示前20行
而真正的room_type值只有['Private room', 'Entire home/apt', 'Hotel room', 'Shared room']。
可能有用的火花資訊:
SparkSession - in-emory
SparkContext
火花瀏覽器
版本
v3.1.2
主站
本地[*]
應用程式名稱
pyspark-shell
和檔案的編碼
!file listings.csv
listings.csv。UTF-8 Unicode text
listings.csv是一個從這里下載的Airbnb統計csv檔案
所有運行& 驅動代碼我也上傳到Colab
uj5u.com熱心網友回復:
我認為從這里對檔案進行編碼應該可以解決問題。所以你把encoding="utf8 "加到你的變數listings_df的元組中。
就像下面所示;
listings_df = spark.read.csv("listings.csv", encoding="utf8", header=True, mode='DROPMALFORMED')
uj5u.com熱心網友回復:
我發現有兩件事:
- 有些行有引號要轉義(
escape='"'/code>) - 還有@JosefZ提到了不需要的換行問題(
multiLine=True)
你必須這樣讀:
input_df = spark.read.csv(path, header=True, multiLine=True, escape='"')
output_df = input_df.groupBy("room_type").count()
output_df.show()
--------------- -----
| room_type|count|
--------------- -----
| 共用房間| 44|
|酒店房間| 110|
|整棟房屋/apt|12829|
|私人房間|3495|
--------------- -----
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/310254.html
標籤:
上一篇:如何使用Powershell在csv中添加額外的';'(分號)或任何特殊字符,除了第一列和空單元格的值之外,所有的列都是如此。
