Я использую Spark 2.3.0.
В качестве проекта Apache Spark я использую этот набор данных для работы. При попытке прочитать csv с помощью spark строка в кадре данных spark не соответствует правильной строке в файле csv (см. Пример csv здесь ). Код выглядит следующим образом:
answer_df = sparkSession.read.csv('./stacksample/Answers_sample.csv', header=True, inferSchema=True, multiLine=True);
answer_df.show(2)
выход
+--------------------+-------------+--------------------+--------+-----+--------------------+
| Id| OwnerUserId| CreationDate|ParentId|Score| Body|
+--------------------+-------------+--------------------+--------+-----+--------------------+
| 92| 61|2008-08-01T14:45:37Z| 90| 13|"<p><a href=""htt...|
|<p>A very good re...| though.</p>"| null| null| null| null|
+--------------------+-------------+--------------------+--------+-----+--------------------+
only showing top 2 rows
Тем не менее,
Когда я использовал панд, это работало как шарм.
df = pd.read_csv('./stacksample/Answers_sample.csv')
df.head(3)
выход
Index Id OwnerUserId CreationDate ParentId Score Body
0 92 61 2008-08-01T14:45:37Z 90 13 <p><a href="http://svnbook.red-bean.com/">Vers...
1 124 26 2008-08-01T16:09:47Z 80 12 <p>I wound up using this. It is a kind of a ha...
Мои наблюдения:
Apache spark рассматривает каждую строку в CSV-файле как запись для фрейма данных (что разумно), но, с другой стороны, панды разумно (не уверены, на основании каких параметров) выясняют, где на самом деле заканчивается запись.
Вопрос
Я хотел бы знать, как я могу дать Spark команду правильно загрузить данные.
Данные для загрузки выглядят следующим образом: строки, начинающиеся с 92
и 124
, представляют собой две записи.
Id,OwnerUserId,CreationDate,ParentId,Score,Body
92,61,2008-08-01T14:45:37Z,90,13,"<p><a href=""http://svnbook.red-bean.com/"">Version Control with Subversion</a></p>
<p>A very good resource for source control in general. Not really TortoiseSVN specific, though.</p>"
124,26,2008-08-01T16:09:47Z,80,12,"<p>I wound up using this. It is a kind of a hack, but it actually works pretty well. The only thing is you have to be very careful with your semicolons. : D</p>
<pre><code>var strSql:String = stream.readUTFBytes(stream.bytesAvailable);
var i:Number = 0;
var strSqlSplit:Array = strSql.split("";"");
for (i = 0; i < strSqlSplit.length; i++){
NonQuery(strSqlSplit[i].toString());
}
"