Spark-我可以正确读取csv吗?

时间:2018-10-21 21:38:46

标签: apache-spark pyspark databricks

我使用以下命令将一个csv文件读取到Spark中

  

df = spark.read.format(file_type).options(header ='true',quote ='\“',   ignoreLeadingWhiteSpace ='true',inferSchema ='true')。load(file_location)

当我尝试使用其他来源的示例CSV数据并进行diplsay(df)时,它显示的标题行整齐,后面紧跟数据。

当我对包含40列和数百万行的主数据进行尝试时,它仅显示前20个列标题,而没有数据行。

这是正常行为还是它读错了?

更新: 我将把这个问题标记为已回答,因为以下提示很有用。但是我的结果是:

df.show(5, truncate=False)

当前显示: + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------------------------------- + | ^“ periodID”,“ DAXDate”,“国家名称”,“年份“,”交易日期“,” QTR“,”客户编号“,”客户名称“,”客户城市“,”文档类型代码“,”订单编号“,”产品代码“,”产品说明“,”销售UOM“ ,“次级专营权代码”,“次级专营权描述”,“产品主要代码”,“产品主要描述”,“产品次要代码”,“产品次要描述”,“发票编号”,“发票日期时间”,“类别交易ID”,“交易类别”,“区域”,“ AmountCurrencyType”,“扩展成本”,“总交易销售额”,“净交易销售额”,“总计(额外标准成本)”,“ AdjustmentType”,“ ExcludeComme” nt”,“ CurrencyCode”,“ fxRate”,“ Quantity”,“ FileName”,“ RecordCount”,“ Product Category”,“ Direct”,“ ProfitCenter”,“ ProfitCenterRegion”,“ ProfitCenterCountry” | + ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------------------------------

我将不得不回到基础上,在文本编辑器中预览csv,以确定该文件的正确格式是什么,以找出问题所在。注意,我必须将我的代码更新为以下内容以处理管道除臭器:

df = spark.read.format(file_type).options(header='true', quote='\"', delimiter='|',ignoreLeadingWhiteSpace='true',inferSchema='true').load(file_location)

3 个答案:

答案 0 :(得分:3)

是的,这是正常行为。数据框函数show()的默认值是显示20行。您可以为此设置一个不同的值(但请记住,打印文件的所有行都没有意义),还可以阻止其被截断。例如:

df.show(100, truncate=False)

答案 1 :(得分:0)

Spark数据帧显示有限的行和列是正常的。您读取的数据应该没有问题。但是,要确认您已正确阅读csv,可以尝试使用

查看df中的行数和列数
len(df.columns)

df.columns

关于行数

df.count()

如果需要详细查看内容,可以使用stated的选项cronoik

答案 2 :(得分:0)

这是正常行为。您可以通过多种方式查看数据内容:

show() :以格式化的方式向您显示前20行。您可以指定要显示的行数作为参数(如果您提供的值高出您的数据就可以了!)。作为默认配置,列也将被截断。您可以指定truncate=False以显示所有列。 (就像@cronoik在回答中正确说了一样。)

head() :与show()相同,但是它以“行”格式打印日期。没有提供格式良好的表格,它对于快速完整地查看数据很有用,例如使用head(1)仅显示第一行。

describe().show() :您可以显示摘要,以使您深入了解数据。例如,向您显示元素计数,每列的最小值/最大值/平均值。