更正格式错误的 CSV 并将更正后的数据拉回到数据框中
Correct Malformed CSV and pull corrected data back into a dataframe
更新如下......
已将 csv 数据自动转储到我们的后端,看起来数据中隐藏了一些格式错误的项目。有一个职位名称在两个词之间错误地包含了一个 \n。这正在破坏我们的数据,所以这就是问题所在。
我想在 csv 中读取全文,regexp_replace 带有更正的标题,然后将这个固定的全文加载到一个新的数据框中,就好像我加载了一个正确的 csv 一样开始......这是我现在所处的疯狂状态:大声笑。
# Import in the functions I need
# from pyspark.sql.functions import col
# Looks like there is a job family title with an issue. There's a carriage return / line feed between two words messing up the csv
# This needs to be patched before we actually pull the data into the dataframes to begin work
data_requisitions_patch0 = spark.read.text('abfss://container@somethingcool.dfs.core.windows.net/Data/brokencsv.csv', wholetext=True)
data_requisitions_patch0.collect()
data_requisitions_new = data_requisitions_patch0
# print(data_requisitions_patch0)
# data_requisitions_patch0.printSchema()
# data_requisitions_patch0.show()
data_requisitions_patch1 = data_requisitions_patch0 \
.withColumn("value", regexp_replace(col('value'), 'Job - Starting\n', 'Job - Starting'))
data_requisitions_patch1.collect()
print('patch0')
data_requisitions_new.count()
print('patch1')
data_requisitions_patch1.count()
# print('Patch0 dataframe: ' + data_requisitions_patch0.count())
# print('Patch0 dataframe: ' + data_requisitions_patch1.count())
# data_requisitions_test0 = spark(data_requisitions_patch1, header=True)
# data_requisitions_test1 = spark.read.csv('abfss://container@somethingcool.dfs.core.windows.net/Data/brokencsv.csv', header=True)
# data_requisitions_test0.count()
# data_requisitions_test0.printSchema()
# data_requisitions_test1.count()
# data_requisitions_test1.printSchema()
现在显然一团糟,我正在尝试解决 regexp_replace 是否正常,但运气不佳。然后我想到我有一个单行单列数据框。现在我试图弄清楚如何将数据帧 post 和 'patch' 转换回正常的 csv 数据帧,就像开始时一切正常一样。
我留下了我所有的测试废话,以为你可能会看到我的头在哪里......不确定这是否有帮助。很明显,链接是伪造的。
首先:我的方向是否正确?这一切都没有真正起作用。我什至无法让计数工作。 test1.count() 会 return... 但 test0.count() 不会?我什至不关心计数,我只是想弄清楚为什么它不起作用。
其次:格式错误的 csv -> 全文数据框 -> 正则表达式修复问题 -> 修复数据框 headers,行,像正常一样。
我还好吗?
=======
更新
取得了一些很大的进步,我最终在 \n 换行符上拆分了全文数据框并将其分解成行。效果很好。现在数据框有它应该有多少行。现在正在努力弄清楚如何 re-map 列以正确创建这些列。
想法是将 header 行纳入并尝试将其用作地图?不知道,还在研究中
我没有正确处理这个问题...像典型的 C# 项目一样处理它,从数据库中提取数据并进行处理。但这并不能很好地解决这个问题。最终将处理后的数据放入数据框本身,运行 我的 if 检查包含的列。效果非常好,而且比尝试提取数据进行检查要快得多。
更新如下......
已将 csv 数据自动转储到我们的后端,看起来数据中隐藏了一些格式错误的项目。有一个职位名称在两个词之间错误地包含了一个 \n。这正在破坏我们的数据,所以这就是问题所在。
我想在 csv 中读取全文,regexp_replace 带有更正的标题,然后将这个固定的全文加载到一个新的数据框中,就好像我加载了一个正确的 csv 一样开始......这是我现在所处的疯狂状态:大声笑。
# Import in the functions I need
# from pyspark.sql.functions import col
# Looks like there is a job family title with an issue. There's a carriage return / line feed between two words messing up the csv
# This needs to be patched before we actually pull the data into the dataframes to begin work
data_requisitions_patch0 = spark.read.text('abfss://container@somethingcool.dfs.core.windows.net/Data/brokencsv.csv', wholetext=True)
data_requisitions_patch0.collect()
data_requisitions_new = data_requisitions_patch0
# print(data_requisitions_patch0)
# data_requisitions_patch0.printSchema()
# data_requisitions_patch0.show()
data_requisitions_patch1 = data_requisitions_patch0 \
.withColumn("value", regexp_replace(col('value'), 'Job - Starting\n', 'Job - Starting'))
data_requisitions_patch1.collect()
print('patch0')
data_requisitions_new.count()
print('patch1')
data_requisitions_patch1.count()
# print('Patch0 dataframe: ' + data_requisitions_patch0.count())
# print('Patch0 dataframe: ' + data_requisitions_patch1.count())
# data_requisitions_test0 = spark(data_requisitions_patch1, header=True)
# data_requisitions_test1 = spark.read.csv('abfss://container@somethingcool.dfs.core.windows.net/Data/brokencsv.csv', header=True)
# data_requisitions_test0.count()
# data_requisitions_test0.printSchema()
# data_requisitions_test1.count()
# data_requisitions_test1.printSchema()
现在显然一团糟,我正在尝试解决 regexp_replace 是否正常,但运气不佳。然后我想到我有一个单行单列数据框。现在我试图弄清楚如何将数据帧 post 和 'patch' 转换回正常的 csv 数据帧,就像开始时一切正常一样。
我留下了我所有的测试废话,以为你可能会看到我的头在哪里......不确定这是否有帮助。很明显,链接是伪造的。
首先:我的方向是否正确?这一切都没有真正起作用。我什至无法让计数工作。 test1.count() 会 return... 但 test0.count() 不会?我什至不关心计数,我只是想弄清楚为什么它不起作用。
其次:格式错误的 csv -> 全文数据框 -> 正则表达式修复问题 -> 修复数据框 headers,行,像正常一样。
我还好吗?
=======
更新
取得了一些很大的进步,我最终在 \n 换行符上拆分了全文数据框并将其分解成行。效果很好。现在数据框有它应该有多少行。现在正在努力弄清楚如何 re-map 列以正确创建这些列。
想法是将 header 行纳入并尝试将其用作地图?不知道,还在研究中
我没有正确处理这个问题...像典型的 C# 项目一样处理它,从数据库中提取数据并进行处理。但这并不能很好地解决这个问题。最终将处理后的数据放入数据框本身,运行 我的 if 检查包含的列。效果非常好,而且比尝试提取数据进行检查要快得多。