Другим случаем, когда вы можете видеть ту же ошибку, является Spark REPL конечной точки AWS Glue dev, когда вы пытаетесь преобразовать динамический кадр в фрейм данных.
На самом деле существует несколько разных исключений, таких как: :
pyspark.sql.utils.IllegalArgumentException: u"Error while instantiating 'org.apache.spark.sql.hive.HiveSessionState':"
ERROR XSDB6: Another instance of Derby may have already booted the database /home/glue/metastore_db.
java.sql.SQLException: Failed to start database 'metastore_db' with class loader org.apache.spark.sql.hive.client.IsolatedClientLoader
Решение сложно
Загруженный REPL содержит экземпляр SparkSession
в переменной spark
, и вам просто нужно остановить его перед созданием нового SparkContext
:
>>> spark.stop()
>>> from pyspark.context import SparkContext
>>> from awsglue.context import GlueContext
>>>
>>> glue_context = GlueContext(SparkContext.getOrCreate())
>>> glue_frame = glue_context.create_dynamic_frame.from_catalog(database=DB_NAME, table_name=T_NAME)
>>> df = glue_frame.toDF()
Это должно работать на Вас без потребности в чем-либо в коде позади (кроме привязки повторителя..):
<asp:Repeater ID="repImages" runat="server">
<HeaderTemplate><div></HeaderTemplate>
<ItemTemplate>
<%# (Container.ItemIndex != 0 && Container.ItemIndex % 5 == 0) ? @"</div><div>" : string.Empty %>
<asp:Image ID="imgGallery" runat="server" ImageUrl='<%# /* your code here */ %>' />
</ItemTemplate>
<FooterTemplate></div></FooterTemplate>
</asp:Repeater>
Если Вы хотите сохранить свою разметку на странице ASPX, Вы могли бы также попробовать эту вариацию на метод David:
На aspx странице:
<ItemTemplate>
<asp:Literal runat="server" ID="divStart" Text="<div>" />
<asp:Image ....>
<asp:Literal runat="server" ID="divEnd" Text="</div>" />
</ItemTemplate>
В событии ItemDataBound в codebehind:
e.Item.FindControl("divStart").Visible
= e.Item.FindControl("divEnd").Visible
= e.Item.ItemIndex % 5 == 0;
Добавьте два пустых элемента управления "метка" в свои Повторители ItemTemplate, где Вы хотели бы, чтобы Ваши теги Div были.
Затем добавляют событие ItemDataBound к Повторителю.
Затем добавляют этот код в событие ItemDataBound:
Protected Sub Repeater1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs)
If (e.Item.ItemType = ListItemType.Item) Or (e.Item.ItemType = ListItemType.AlternatingItem) Then
If e.Item.ItemIndex Mod 5 = 0 Then
Dim lblDivStart As Label = CType(e.Item.FindControl("lblDivStart"), Label)
Dim lblDivEnd As Label = CType(e.Item.FindControl("lblDivEnd"), Label)
lblDivStart.text = "<div>"
lblDivEnd.text = "</div>"
End If
End If
End Sub
Примечание - Этому будет нужна некоторая тонкая настройка для обработки первого отделения, и Вы, возможно, должны сделать что-то как Если (e. Объект. ItemIndex + 1) Модификация 5 = 0 , чтобы заставить отделения обнаруживаться точно, где Вы хотите их.
Для большего количества информации:
DataListItem. Свойство
ItemIndex DataList. Событие
Здесь Именно здесь Asp.Net WebForms может дать вам невероятную эффективность RAD. Вы можете использовать новый элемент управления ListView и установить количество элементов для каждой «группы», что позволит вам настроить HTML-код, окружающий группу, а также каждый отдельный элемент. Таким образом, вы можете окружить группу условными тегами.
<asp:ListView ID="ListView1" runat="server" DataKeyNames="id" DataSourceID="LinqDataSource1" GroupItemCount="3">
<LayoutTemplate>
<div id="layout">
<asp:PlaceHolder ID="groupPlaceholder" runat="server"></asp:PlaceHolder>
</div>
</LayoutTemplate>
<GroupTemplate>
<div class="group">
<asp:PlaceHolder ID="itemPlaceholder" runat="server"></asp:PlaceHolder>
</div>
</GroupTemplate>
<EmptyDataTemplate>
<span>No data was returned.</span>
</EmptyDataTemplate>
<ItemTemplate>
<div class="item">
<img alt='<%# Eval("title") %>' title='<%# Eval("title") %>'
src='<%# Eval("filename","photos/{0}") %>' />
</div>
</ItemTemplate>
</asp:ListView>