我是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
文件不包含标头,分隔符为::
。
问题:
- 如何读取
.dat
文件 - 如何添加我在预期输出中提到的自定义标头
那么,我如何才能达到预期的输出?我在哪里犯错误?
我很乐意阅读你的建议和答案:(
非常感谢长时间详细的回答。
您只需使用以::
为分隔符的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|
+------+-------+------+---------+