如何使用pyspark.sql.session.SparkSession对象读取.dat文件



我是Spark的新手,如果有我愚蠢的错误,请接受我的错误(开放征求您的建议:(

我使用以下代码创建了一个pyspark.sql.session.SparkSession对象:

from pyspark.sql import SparkSession
spark = SparkSession.builder.master("local[*]").getOrCreate()

我知道我可以使用spark.read.csv('filepath')读取csv文件。

现在,我想使用SparkSession对象读取.dat文件。

我的ratings.dat文件看起来像:

1::1193::5::978300760
1::661::3::978302109
1::914::3::978301968
1::3408::4::978300275

我的代码:

ratings = spark.read.format('dat').load('filepath/ratings', sep='::')

输出:

An error occurred while calling o102.load.
: java.lang.ClassNotFoundException

预期输出:

+------+-------+------+---------+
|UserID|MovieID|Rating|Timestamp|
+------+-------+------+---------+
|     1|   1193|     5|978300760|
|     1|    661|     3|978302109|
| and.........so.......on.......|
+------+-------+------+---------+

注意:我的ratings.dat文件不包含标头,分隔符为::

问题:

  1. 如何读取.dat文件
  2. 如何添加我在预期输出中提到的自定义标头

那么,我如何才能达到预期的输出?我在哪里犯错误?

我很乐意阅读你的建议和答案:(

非常感谢长时间详细的回答。

您只需使用以::为分隔符的csv读取器,并提供一个模式:

df = spark.read.csv('ratings.dat', sep='::', schema='UserID int, MovieID int, Rating int, Timestamp long')
df.show()
+------+-------+------+---------+
|UserID|MovieID|Rating|Timestamp|
+------+-------+------+---------+
|     1|   1193|     5|978300760|
|     1|    661|     3|978302109|
|     1|    914|     3|978301968|
|     1|   3408|     4|978300275|
+------+-------+------+---------+

最新更新